【问题标题】:How to Order a list and group by the list如何按列表排序列表和分组
【发布时间】:2015-08-06 18:28:14
【问题描述】:

我有一个要在最后打印的静态列表。

 class User 
    {
          int ID {get;set;}
          string status {get; set;}
          DateTime startTime {get;set;}
          int groupId {get;set;}
    }

我想在内存中维护用户列表并在最后打印。 现在列表可以包含如下数据:

List<User> userList = new List<User>();
userList.Add( new User{ ID = 1, ..., groupId = 1 } );
userList.Add( new User{ ID = 2, ..., groupId = 1 } );
userList.Add( new User{ ID = 3, ..., groupId = 2 } );
userList.Add( new User{ ID = 4, ..., groupId = 1 } );
userList.Add( new User{ ID = 5, ..., groupId = 3 } );

我想对这些数据进行分组,我可以使用userList.GroupBy(x =&gt; x.groupID) 来完成,我得到了Enumberable&lt;ID, List&lt;User&gt;&gt;()。抱歉,在分组列表中,我想检查是否有任何用户的状态 == 失败,然后我想打印所有用户信息,如果状态 == true,那么我只想打印用户 ID 或名称。为此我正在做

groupedList.Any(x => x.status == fail) 

但我希望我的输出按 startTime 排序,然后我希望结果按 Id 分组

var result = userList.GroupBy(x=> x.groupID).OrderByDescending(x => x.startTime).ToList();

然后,当我像这样打印时,我想要我的结果

startTime - 10.00 groupId - 1 ,id - 1, ....status - fail ... more properties 
startTime - 10.00 groupId - 1, id - 2, .... status - pass ...
startTIme - 10.00 groupId - 1, id - 4, status - pass 
startTiem = 10.00 groupId - 2, id - 3, status - pass (just this info)
starttime - 9.50  groupId - 3, id - 5, status - fail ... more info 
starttime - 9.50  groupid - 3, id - 6, status - pass ... (still more info. as group has a fail case)

如果我使用上面的 linq 查询,它不会给出相同的输出。请就如何实现这一点提出建议。

【问题讨论】:

    标签: c# linq list


    【解决方案1】:

    在我看来,您根本不想分组 - 您的列表有 5 个元素,而且您的输出也有。您只想按多个属性订购。这应该可以工作,然后:

    userList.OrderByDescending(x => x.startTime).ThenBy(x => x.groupId).ToList();
    

    【讨论】:

    • 您好 Glorfindel,我编辑了我的问题。我实际上想对它们进行分组,因为如果组中的任何用户的状态 = 失败,那么我想打印更多信息,否则(状态 = 通过),我只会打印最少的信息。
    • 好的,但仍然不清楚,因为您提供的示例输入与所需的输出不匹配。例如。输入中只有一条 ID = 1 的记录,但输出中有两条。
    • 好的,关于 ID,我的意图是如果在组中任何项目都有失败案例,那么我想显示异常/处理失败的原因.. 如果它通过(所有用户在一个组内)有一个通行证,我只想显示具有通行证状态的用户信息......所以,我仍然显示所有列表项。我按 GroupID 对它们进行分组的唯一目的是获取该组中所有用户的状态。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 2018-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    相关资源
    最近更新 更多