【问题标题】:Create a new List from existing one and group objects从现有的一个和组对象创建一个新列表
【发布时间】:2014-10-30 10:35:29
【问题描述】:

我有一个带有用户对象(用户名(字符串)和等级(字符串))的列表

List<User> users = new List<User>();

列表填充了来自 DB(或文本文件)的值,我有一个包含 5 个对象的列表:

user1 A
user1 B
user2 A
user2 G
user3 D

我想修改列表(或创建一个新列表),所以结果应该是一个带有 htis 值的新列表:

user1 A,B
user2 A,G
user3 D

我试过 GroupBy :

var result = jquery.GroupBy(u => u.username).OrderByDescending(g => g.Count()).Select(g => g.Key);

但我希望将结果放在一个新列表中

【问题讨论】:

    标签: c# linq list sorting


    【解决方案1】:

    试试这个

    var result = users
                .GroupBy(x => x.Name)
                .OrderByDescending(g => g.Count())
                .Select(g => new { Name = g.Key, Grades = string.Join(",", g.Select(x => x.Grade) });
    

    这里是code sample

    【讨论】:

      【解决方案2】:

      试试这个:-

      var query = users.GroupBy(x => x.UserName).OrderByDescending(x => x.Count())
                                              .Select(x => new { UserName = x.Key, Grades = String.Join(",", x.Select(z => z.Grade)) });
      

      工作Fiddle

      【讨论】:

      • 效果很好。因此,如果我用另一个元素扩展我的用户对象,比如说名字,第二个名字,这可以在没有更大变化的情况下工作吗?
      • @user576914 - 是的,这取决于您想要分组的方式以及您期望的输出。
      【解决方案3】:

      你可以建立一个新的类型,它会保存你想要的信息,比如

      public class UserGrade
      {
          // the user's name.
          public string UserName { get; set;}
      
          // a comma separated list of the grades achieved by the user.
          public string Grades { get; set; }
      }
      

      然后我们按用户名对结果进行分类,并为每个组选择一个 UserGrade 对象。最后我们调用ToList,以便我们以列表的形式获得结果:

      var result = jquery.GroupBy(u => u.username)
                         .Select(x=> new UserGrade{
                             UserName = x.Key,
                             Grades = String.Join(",",x.Select(y=>y.Grade)
                       }).ToList();
      

      注意 您可以避免定义新类型。在这种情况下,您的列表将包含一系列匿名类型的对象。

      【讨论】:

        猜你喜欢
        • 2022-01-05
        • 2019-02-28
        • 2012-10-23
        • 2021-07-10
        • 1970-01-01
        • 2012-11-08
        • 2017-07-10
        • 2013-06-04
        • 1970-01-01
        相关资源
        最近更新 更多