Как я могу получить List<Type1>, который включает в себя другой List<Type2>, от другого List<Type3>?
Вот такая ситуация:
У меня List<DbStruncture>. Каждая запись включает DatabaseStructure
public partial class DatabaseStructure
{
public string TableSchema { get; set; }
public string TableName { get; set; }
public string ColumnName { get; set; }
public bool? IsPrimaryKey { get; set; }
}
у меня тоже есть
public class Table
{
public string Name { get; set; }
public string Schema { get; set; }
public List<Column> Columns { get; set; }
}
public class Column
{
public string Name { get; set; }
public bool? IsPrimaryKey { get; set; }
}
Теперь я хочу заполнить данные из List<DatabaseStructure> в List<Table>, который включает в себя List<Column> со всеми Columns этого Table.
Я пробовал это с LINQ, и вот как далеко я зашел:
var query =
from t in result
group t.TableName by t.TableName
into tn
select new
{
Table = tn.Key,
Schema = from s in result where s.TableName == tn.Key select s.TableSchema.First(),
Columns = from c in result where c.TableName == tn.Key select new Column
{
Name = c.ColumnName,
IsPrimaryKey = c.IsPrimaryKey
}
};
Проблема с моим решением в том, что мой запрос не является общим списком ...
Может ли кто-нибудь указать мне правильное направление? Подходит ли LINW здесь? Если да, как мне получить желаемый результат?
заранее спасибо





from, group, into, потому что это более выразительно, и если вам нужно выполнять более сложные операции Linq, вам все равно придется использовать методы расширения.SELECT ... FROM INFORMATION_SCHEMA.COLUMNS), где каждая строка содержит повторяющуюся информацию о таблице, поэтому используйте GroupBy для группировки строк вместе по их идентификатору таблицы (не забудьте использовать обе схемы таблицы а также Table Имя для однозначной идентификации таблицы!)IGrouping<TKey: (TableSchema,TableName), TElement: DatabaseStructure>) в объект Table.Table.Columns, выполнив внутренний Select из группы IGrouping, а затем .ToList(), чтобы получить конкретный объект List<Column>.Мое выражение:
List<DatabaseStructure> input = ...
List<Table> tables = input
.GroupBy( dbs => new { dbs.TableSchema, dbs.TableName } )
.Select( grp => new Table()
{
Name = grp.Key.TableName,
Schema = grp.Key.TableSchema,
Columns = grp
.Select( col => new Column()
{
Name = col.Name,
IsPrimaryKey = col.IsPrimaryKey
} )
.ToList()
} )
.ToList()
Хорошо, только что нашел ответ сам.
Вот:
var query =
(from t in result
group t.TableName by t.TableName
into tn
select new Table
{
Name = tn.Key,
Schema = (from s in result where s.TableName == tn.Key select s.TableSchema).First(),
Columns = (from c in result
where c.TableName == tn.Key
select new Column
{
Name = c.ColumnName,
IsPrimaryKey = c.IsPrimaryKey
}).ToList()
});