【问题标题】:GroupBy, OrderByDescending using Lambda in Linq在 Linq 中使用 Lambda 的 GroupBy、OrderByDescending
【发布时间】:2017-02-02 08:19:29
【问题描述】:

我有一个集合,我需要使用Linq 按日期降序(DateProcessed 字段)对其进行排序,首先我按两个可能的键进行分组:BookedEmpty。但是它没有被订购的数据..

这是我的表情:

IEnumerable<IGrouping<string, MyClassMongo>> sub = Model.MyCollection.GroupBy(f => f.IsBooked ? "Booked" : "Empty").OrderByDescending(f => f.FirstOrDefault().DateProcessed); 

我很困惑,因为我先分组,我知道分组后集合被分成两部分(BookedEmpty)所以我不知道如何处理排序,因为我先分组

【问题讨论】:

    标签: c# linq lambda


    【解决方案1】:

    如果您要查询内存中的集合,那么只需在分组之前进行排序:

    IEnumerable<IGrouping<string, MyClassMongo>> sub = 
        Model.MyCollection
             .OrderByDescending(f => f.DateProcessed)
             .GroupBy(f => f.IsBooked ? "Booked" : "Empty");
    

    每个组中的项目将按DateProcessed 排序。

    【讨论】:

      【解决方案2】:

      如果你想先分组,然后在组内对结果进行排序。你可以试试下面的方法

      Model.MyCollection
          .GroupBy(f => f.IsBooked, 
                   (f, g) => new{Key=f.DateProcessed, Group = g.OrderByDescending(c=>c.IsBooked)})
          .OrderByDescending(f => f.Key);
      

      PS:代码可能存在语法问题,但未测试,但想法应该是为每个组创建密钥,以便我们可以按顺序排序

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-29
        • 1970-01-01
        • 2011-05-29
        • 2011-03-25
        相关资源
        最近更新 更多