LINQ Group by sort

时间:2016-07-06 19:44:38

标签: c# linq

我知道我可以在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会覆盖排序。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

这应该有效:

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