LINQ分组[重复]
Posted
技术标签:
【中文标题】LINQ分组[重复]【英文标题】:LINQ Grouping by [duplicate] 【发布时间】:2020-12-01 02:11:59 【问题描述】:我有类似的类对象列表
public class MyClass
public int UserId get; set;
public int ItemId get; set;
public string ItemName get; set;
我有这个列表,我想按 UserId 对它们进行分组。我追求的结果是List<MyClass>
的集合,其中每个列表都由用户列出
我已经应用了 group by 但不确定应该如何选择
var group = items.GroupBy(g => g.UserId).
Select(s=> new MyClass
UserId = s.Key,
).ToList();
样本数据
var items = new List<MyClass>
new MyClassUserId = 100, ItemId = 245, ItemName = "ABC",
new MyClassUserId = 100, ItemId = 125, ItemName = "ABCff",
new MyClassUserId = 150, ItemId = 233, ItemName = "AweBC",
new MyClassUserId = 100, ItemId = 233, ItemName = "ABweweC"
;
在这里,我希望有两组 List<MyClass>
一个用户 ID 为 100 的列表和另一个用户 ID 为 150 的列表,每个列表将有 2 个类对象
【问题讨论】:
输出应该如何?用户 ID,列表List<MyClass>
那么你可以通过UserId
订购当前items
,这样你所有具有相同UserId的记录都将在同一个组中
我已经用示例数据和预期结果更新了问题
你想要列表> ?
【参考方案1】:
您可以使用UserId
作为键创建字典:
var groups = items.GroupBy(c => c.UserId)
.ToDictionary(g => g.Key, g => g.ToList());
现在举例如下:
Console.WriteLine(String.Join(Environment.NewLine, groups[100]));
将打印出来:
100 245 ABC
100 125 ABCff
100 233 ABweweC
【讨论】:
【参考方案2】:我想你在这之后会给你List<List<MyClass>>
var group = items.GroupBy(g => g.UserId).Select(s => s.ToList());
【讨论】:
那是 IEnumerable>,对吧?缺少一个 ToList 我想你明白了 正是我所追求的以上是关于LINQ分组[重复]的主要内容,如果未能解决你的问题,请参考以下文章