c# - LINQ 创建嵌套对象的通用列表
问题描述
我怎样才能得到一个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; }
}
现在我想将 Data 中的数据填充List<DatabaseStructure>
到 aList<Table>
中,其中包含 aList<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 是正确的方法吗?如果是,我如何获得想要的结果?
提前致谢
解决方案
- 前言:我更喜欢(并推荐)使用带有扩展方法语法的 Linq 而不是使用
from
,group
,into
关键字,因为它更具表现力,如果您需要执行更高级的 Linq 操作,无论如何您都需要使用扩展方法。 - 首先,您的输入是非规范化的(我假设 running 的输出
SELECT ... FROM INFORMATION_SCHEMA.COLUMNS
),其中每行包含重复的表信息,因此使用GroupBy
它们的表标识符将行分组在一起(不要忘记同时使用表架构和表名唯一标识一个表!) - 然后将每个组 (
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()
推荐阅读
- regex - 如何匹配更改的标题下的一组文本
- javascript - Angular 服务器端渲染模板 (.cshtml) 使用转义符号解析错误
- jetty - 找不到适用于 Java 版本的匹配 alpn-boot JAR:12.0.2
- javascript - Javascript: Unexpected token { - 尝试将 typescript 文件中的自定义类导入 javascript 文件时发生
- r - Using renderLeaflet() inside an interactive document (Rmarkdown)
- powershell - 在初始命令之后将命令发送到 Start-Process 函数调用
- python - Python 导入 - ModuleNotFoundError:没有名为 X 的模块
- linux - 如何在bash中“decdump”一个字符串?
- c++ - 创建 Variant 类和 std::map
- javascript - 如何通过正则表达式排除某些字符串值?