【问题标题】:How to Group and Order in a LINQ Query如何在 LINQ 查询中进行分组和排序
【发布时间】:2010-05-06 00:20:57
【问题描述】:

我想在查询构建器表达式中进行分组和排序。以下查询使我接近我想要的,但 order by 似乎不起作用。

我所拥有的是一个具有唯一 id 的对象,但有些对象会有一个共同的 versionId。我想获取相同 versionId 的最后编辑项目。所以每个版本 ID 只有一个项目,我希望它是最后一个编辑的项目。

IQueryable<Item> result = DataContext.Items.Where(x => (x.ItemName.Contains(searchKeyword) ||
                                  x.ItemDescription.Contains(searchKeyword))
                                  .GroupBy(y => y.VersionId)
                                  .Select(z => z.OrderByDescending(item => item.LastModifiedDateTime).FirstOrDefault());

编辑:我并不真正关心结果集的顺序,我真的只关心返回分组中的哪些项目。我想确保返回 versionId 组中最后编辑的项目。

【问题讨论】:

    标签: c# linq entity-framework


    【解决方案1】:

    您的 z 参数包含各个组对象。

    通过在Select 内部调用OrderBy,您可以订购每个组中的项目,而不是组本身。

    您还需要在Select 之后调用OrderBy,如下所示:

    .Select(z.OrderByDescending(item => item.LastModifiedDateTime).FirstOrDefault())
    .Where(item => item != null)
    .OrderByDescending(item => item.LastModifiedTime)
    

    【讨论】:

    • 我不太担心不同versionIds(外部orderby)的顺序,我更关心给定的versionId。我的第一个查询似乎没有根据 versionId 将订单应用于该分组中的项目。
    猜你喜欢
    • 2016-05-24
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多