C# 是否可以在LINQ中执行Group By,但只返回';最近的';项目(每组)?
我正在尝试返回.NET LINQ中每个组的最新项目 它让我想起了在Sql中做一个C# 是否可以在LINQ中执行Group By,但只返回';最近的';项目(每组)?,c#,.net,linq,linq-to-objects,C#,.net,Linq,Linq To Objects,我正在尝试返回.NET LINQ中每个组的最新项目 它让我想起了在Sql中做一个分区,我们对每个分区进行分区,并按最近的(每个分区)排序,得到每个分区的前1名 到目前为止,我已经得到了linq代码的开始 from p in products group p by new {p.Provider.ProductId, p.Provider.Name} into g 但是我不知道如何通过p.CreatedOn desc添加订单,然后只获取。每个分区/组取(1)。类似于(附加在查询末尾): 我们应该
分区
,我们对每个分区进行分区,并按最近的(每个分区)排序,得到每个分区的前1名
到目前为止,我已经得到了linq代码的开始
from p in products
group p by new {p.Provider.ProductId, p.Provider.Name} into g
但是我不知道如何通过p.CreatedOn desc添加订单,然后只获取。每个分区/组取(1)
。类似于(附加在查询末尾):
我们应该做好这项工作;或者更方便地说:
select new {
g.Key.ProductId,
g.Key.Name,
Product = g.OrderByDescending(x => x.CreatedOn).First()
}
或者,如果您不需要显式地使用密钥(因为它在该项下仍然可用),则只需:
select g.OrderByDescending(x => x.CreatedOn).First()
基本上,每个g
都是一个i分组
(对于一些匿名T
),这意味着每个g
都有一个.Key
属性,即您的组,每个g
都是原始元素的IEnumerable
序列(可能是产品
)。选择g.OrderByDescending(x=>x.CreatedOn).First()
?或FirstOrDefault()会更好吗?不,天哪…/me跑去试试…@Alicia如果没有任何项目,首先就不会有一个组,所以OrDefault
将是多余的
select g.OrderByDescending(x => x.CreatedOn).First()