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();