【问题标题】:LINQ Grouping by [duplicate]LINQ分组[重复]
【发布时间】: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 MyClass{UserId = 100, ItemId = 245, ItemName = "ABC"},
                new MyClass{UserId = 100, ItemId = 125, ItemName = "ABCff"},
                new MyClass{UserId = 150, ItemId = 233, ItemName = "AweBC"},
                new MyClass{UserId = 100, ItemId = 233, ItemName = "ABweweC"}
            };

在这里,我希望有两组 List&lt;MyClass&gt; 一个用户 ID 为 100 的列表和另一个用户 ID 为 150 的列表,每个列表将有 2 个类对象

【问题讨论】:

  • 输出应该如何?用户 ID,列表?
  • 不,只是List&lt;MyClass&gt;
  • 那么你可以通过UserId订购当前items,这样你所有具有相同UserId的记录都将在同一个组中
  • 我已经用示例数据和预期结果更新了问题
  • 你想要列表> ?

标签: c# .net linq .net-4.6


【解决方案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&lt;List&lt;MyClass&gt;&gt;

    var group = items.GroupBy(g => g.UserId).Select(s => s.ToList());
    

    【讨论】:

    • 那是 IEnumerable>,对吧?缺少一个 ToList
    • 我想你明白了
    • 正是我所追求的
    猜你喜欢
    • 2011-02-27
    • 2012-11-25
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    • 2017-06-03
    • 2016-12-10
    • 1970-01-01
    • 2011-09-05
    相关资源
    最近更新 更多