如何从另一个List<Type1>
获得一个包含另一个List<Type2>
的{{1}}?
这里是情况:
我有一个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
。>
我在LINQ上尝试过,这是我得到的成果:
Table
我的解决方案存在的问题是,我的查询不是通用列表...
有人能指出我正确的方向吗? LINW在这里正确的方法吗?如果是,我如何获得想要的结果?
预先感谢
答案 0 :(得分:1)
from
,group
,into
关键字,因为它更具表达力,并且如果需要您仍然需要使用扩展方法来执行更高级的Linq操作。SELECT ... FROM INFORMATION_SCHEMA.COLUMNS
的输出),其中每一行都包含重复的表信息,因此请使用GroupBy
将行按表标识符分组(don别忘了同时使用表架构和表名来唯一标识一个表!)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()
答案 1 :(得分:0)
好的,我自己找到答案。
这里是:
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()
});