C# Linq GroupBy并选择其他属性作为列表

C# Linq GroupBy并选择其他属性作为列表,c#,linq,C#,Linq,如何使用LINQ按属性分组并选择其他属性作为列表 我不擅长解释,所以这里有一个例子: 假设我有一个可以用JSON表示的C对象列表,如下所示: [ { "id":123, "name":"John", "carId":1, "carAge":3 }, { "id":123, "name":"John", "carId":2, "carAge":4 }, { "id":4, "name":"Mary", "carId":3, "carAge":3 }, { "id":

如何使用LINQ按属性分组并选择其他属性作为列表

我不擅长解释,所以这里有一个例子:

假设我有一个可以用JSON表示的C对象列表,如下所示:

[
    { "id":123, "name":"John", "carId":1, "carAge":3 },
    { "id":123, "name":"John", "carId":2, "carAge":4 },
    { "id":4, "name":"Mary", "carId":3, "carAge":3 },
    { "id":4, "name":"Mary", "carId":4, "carAge":3 },
    { "id":123, "name":"John", "carId":5, "carAge":3 }
]
在所有这些对象中,只有carId是唯一的

我想按个人详细信息对它们进行分组,并将这些详细信息与相关的汽车详细信息结合起来

最终结果如下所示,但作为c对象:

[
    {"id":123, "name":"John",
        [
            {"carId":1, "carAge":3},
            {"carId":2, "carAge":4},
            {"carId":5, "carAge":3}
        ]
    },
    {"id":4, "name":"Mary",
        [
            {"carId":3, "carAge":3},
            {"carId":4, "carAge":3}
        ]
    }
]
编辑:

我被困在后面

list.GroupBy(x => new { x.Id, x.Name })
因为我不需要任何聚合函数,只需要选择

我很抱歉没有发布更多的代码,这是一个简化的版本,真正的东西有更多的过滤和复杂的特定领域的术语

所有操作都在内存中完成,无需担心数据库。

对于组的每个部分,按表达式创建一个包含所需字段的匿名对象

使用以下任何一种方法,您都可以为每个键构造一个嵌套集合—使用GroupBy时,它不仅涉及聚合,还涉及对特定数据组的操作。一个例子是聚合方法

var result = from item in data
             group new { item.carId, item.carAge }  by new {item.id, item.name} into g
             select g;
另一种方法是

var result = from item in data
             group  by new {item.id, item.name} into g
             select new {
                 g.Key,
                 Data = g.Select(i => new {i.carId, i.carAge})
             };
在尝试使用方法语法时,可以使用以下重载:

var result = data.Group(k => new {k.id, k.name},
                        e => new {e.carId, e.carAge});
或者,如果不是,只需添加一个“选择投影”:

var result = data.Group(k => new {k.id, k.name})
                 .Select(g => new {
                     g.Key,
                     Data = g.Select(i => new {i.carId, i.carAge})
                 });
对于group uby uu表达式的每个部分,创建一个包含所需字段的匿名对象

使用以下任何一种方法,您都可以为每个键构造一个嵌套集合—使用GroupBy时,它不仅涉及聚合,还涉及对特定数据组的操作。一个例子是聚合方法

var result = from item in data
             group new { item.carId, item.carAge }  by new {item.id, item.name} into g
             select g;
另一种方法是

var result = from item in data
             group  by new {item.id, item.name} into g
             select new {
                 g.Key,
                 Data = g.Select(i => new {i.carId, i.carAge})
             };
在尝试使用方法语法时,可以使用以下重载:

var result = data.Group(k => new {k.id, k.name},
                        e => new {e.carId, e.carAge});
或者,如果不是,只需添加一个“选择投影”:

var result = data.Group(k => new {k.id, k.name})
                 .Select(g => new {
                     g.Key,
                     Data = g.Select(i => new {i.carId, i.carAge})
                 });

请展示你试过的东西。我们可以从那里得到帮助。有很多资料可以查看如何分组,而提供项目也会使事情变得更简单。看起来这是一个简单的GroupBy操作,其中您可以指定单独的键和元素选择器,但使用代码更容易确定。我应该帮助你。我理解并同意您所需要的似乎是按组合键进行分组-从2个值,但实际代码变得复杂,我认为这会分散对问题的注意力,所以不幸的是,这是我现在能做的最好的了。我做了这个过于简单的例子,只是为了更好地解释我的问题。请展示一下你的尝试。我们可以从那里得到帮助。有很多资料可以查看如何分组,而提供项目也会使事情变得更简单。看起来这是一个简单的GroupBy操作,其中您可以指定单独的键和元素选择器,但使用代码更容易确定。我应该帮助你。我理解并同意您所需要的似乎是按组合键进行分组-从2个值,但实际代码变得复杂,我认为这会分散对问题的注意力,所以不幸的是,这是我现在能做的最好的了。我做了这个过于简单的例子,只是为了更好地解释我的问题。