LINQ 按排序分组

本文关键字:排序 LINQ | 更新日期: 2023-09-27 17:55:19

我知道我可以在 LINQ 查询之外执行此操作,但我想知道是否可以在一个查询中执行此操作。

我想提交一个查询,在其中检索具有关联不同 ID 的最新项目。

假设我有以下对象:

{
    ItemDescription: 'Object 1',
    ItemDate: 1/1/2016,
    ItemTypeId: 1
},
{
    ItemDescription: 'Object 2',
    ItemDate: 1/1/2016,
    ItemTypeId: 2
},
{
    ItemDescription: 'Object 3',
    ItemDate: 3/1/2016,
    ItemTypeId: 1
},

我想要一个查询来返回对象 2 和 3(因为 3 是 ItemTypeId=1 的最新版本。

它应该(我认为)如下所示:

var recentItems = (from s in db
                   orderby s.ItemDate descending
                   group s by s.ItemTypeId into uniqueItems
                   select uniqueItems.FirstOrDefault()).ToList();

但是,FirstOrDefault会覆盖排序。

有什么想法吗?

LINQ 按排序分组

这应该有效:

var recentItems = (from s in db
                   group s by s.ItemTypeId into uniqueItems
                   select uniqueItems.OrderByDescending(x=> x.ItemDate ).FirstOrDefault())
                                                                        .ToList();