是否可以在LINQ中执行Group By但只返回“最新”项(每组)?

时间:2013-07-15 08:49:06

标签: c# .net linq linq-to-objects

我正在尝试在.NET LINQ中返回每组的最新项目。

它提醒我在Sql中执行PARTITION我们分区并获得每个分区的前1个,按最近的顺序排列(每个分区)。

到目前为止,我已经开始使用linq代码..

from p in products
group p by new {p.Provider.ProductId, p.Provider.Name} into g

但我不确定如何添加order by p.CreatedOn desc,只需获取.Take(1)每个分区/组

1 个答案:

答案 0 :(得分:5)

类似的内容(附在查询末尾):

select new {
    g.Key,
    Product = g.OrderByDescending(x => x.CreatedOn).First()
}

应该做的工作;或者更方便:

select new {
    g.Key.ProductId,
    g.Key.Name,
    Product = g.OrderByDescending(x => x.CreatedOn).First()
}

或者,如果您不明确需要密钥(因为它无论如何都可以在项目下使用),那么只需:

select g.OrderByDescending(x => x.CreatedOn).First()

基本上,每个g都是IGrouping<T>(对于某些匿名T),这意味着每个g 都有一个{{1}属于您的组的属性,并且每个.Key 原始元素的g序列(可能是IEnumerable<>)。