我正在尝试在.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)
,每个分区/组。
答案 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<>
)。