C# Linq GroupBy并选择其他属性作为列表
如何使用LINQ按属性分组并选择其他属性作为列表 我不擅长解释,所以这里有一个例子: 假设我有一个可以用JSON表示的C对象列表,如下所示: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":
[
{ "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个值,但实际代码变得复杂,我认为这会分散对问题的注意力,所以不幸的是,这是我现在能做的最好的了。我做了这个过于简单的例子,只是为了更好地解释我的问题。