【发布时间】:2017-07-20 14:18:40
【问题描述】:
如何使用 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 })
因为我不需要任何聚合函数,只需要选择。
我很抱歉没有发布更多代码,这是一个简化版本,真实的东西有更多的过滤和复杂的领域特定术语。
一切都在内存中完成 - 无需担心数据库。
【问题讨论】:
-
请展示您尝试过的内容。我们可以从那里提供帮助。有很多来源可以查看如何分组和项目
-
提供minimal reproducible example 也会让事情变得更简单。看起来这是一个简单的
GroupBy操作,您可以在其中指定单独的键和元素选择器,但使用代码更容易确定。 -
stackoverflow.com/questions/2280183/… 应该可以帮助您。似乎按复合键分组 - 您需要从 2 个值开始
-
我理解并同意,但实际代码变得复杂,我认为这会分散问题的注意力,所以不幸的是,这是我现在能做的最好的事情。我做了这个过于简单的例子,以便更好地解释我的问题。