2

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

它让我想起PARTITION在 Sql 中进行分区并获得每个分区的前 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)的, 。

4

1 回答 1

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 都有一个.Key属性是你的组,每个g 都是原始元素的IEnumerable<>序列(大概是Product)。

于 2013-07-15T08:55:39.370 回答