C# 如何在LINQ中将数据塑造为分组项
我从数据库中得到以下结构:C# 如何在LINQ中将数据塑造为分组项,c#,linq,C#,Linq,我从数据库中得到以下结构: [ { "databaseId": 1, "databaseName": "Database1", "schemaName": "someschema", "schemaOwner": "dbo" }, { "databaseId": 1, "databaseName": "Database1", "schemaName": "dbo
[
{
"databaseId": 1,
"databaseName": "Database1",
"schemaName": "someschema",
"schemaOwner": "dbo"
},
{
"databaseId": 1,
"databaseName": "Database1",
"schemaName": "dbo",
"schemaOwner": "dbo"
},
{
"databaseId": 2,
"databaseName": "Database2",
"schemaName": "dbo",
"schemaOwner": "dbo"
}
]
我想把它们塑造成以下几个方面:
[
{
"databaseName": "Database1",
"databaseId" 1,
"schemas": [
{
"schemaName": "someschema",
"schemaOwner": "dbo"
},
{
"schemaName": "dbo",
"schemaOwner": "dbo"
}
]
},
{
"databaseName": "Database2",
"databaseId" 2,
"schemas": [
{
"schemaName": "dbo",
"schemaOwner": "dbo"
}
]
}
]
var schemasGrouped = schemas.GroupBy(s => s.DatabaseName)
.Select(g => new {DatabaseName = g.Key, Schemas = g.ToList()})
.ToList();
到目前为止,我已经尝试了以下方法:
[
{
"databaseName": "Database1",
"databaseId" 1,
"schemas": [
{
"schemaName": "someschema",
"schemaOwner": "dbo"
},
{
"schemaName": "dbo",
"schemaOwner": "dbo"
}
]
},
{
"databaseName": "Database2",
"databaseId" 2,
"schemas": [
{
"schemaName": "dbo",
"schemaOwner": "dbo"
}
]
}
]
var schemasGrouped = schemas.GroupBy(s => s.DatabaseName)
.Select(g => new {DatabaseName = g.Key, Schemas = g.ToList()})
.ToList();
但这并不能满足我的要求,因为它没有在父文档中列出数据库Id,它还列出了子文档中的所有属性,即使我只需要SchemaName和SchemaOwner。您可以尝试添加元素选择器
Func
以重载,并在组键中使用两个字段
var schemasGrouped=schemas
.GroupBy(s=>s.DatabaseName,s.DatabaseId},s=>new{s.schemaName,s.schemaOwner})
.Select(g=>new{DatabaseName=g.Key.DatabaseName,DatabaseId=g.Key.DatabaseId,Schemas=g.ToList()})
.ToList();
您可以尝试将元素选择器Func
添加到重载中,也可以使用组键中的两个字段
var schemasGrouped=schemas
.GroupBy(s=>s.DatabaseName,s.DatabaseId},s=>new{s.schemaName,s.schemaOwner})
.Select(g=>new{DatabaseName=g.Key.DatabaseName,DatabaseId=g.Key.DatabaseId,Schemas=g.ToList()})
.ToList();