System.linq - GroupBy和Max

时间:2013-09-11 12:12:04

标签: c# linq

如何组合groupBy和max? 我想按名称分组,只获得最新版本。 像这样的东西

Docs.GroupBy(x => x.Name ).Max(x => x.VersionNumber)

有可能吗?

以下

searchResult.Docs.GroupBy(x => x.PackageName).Select(x => x.Max(x => x.VersionNumber));

返回

 IEnumerable<int> 

而不是

 IEnumerable<Doc> 

3 个答案:

答案 0 :(得分:2)

按版本号订购每个组,并仅选择第一个文档(它将具有最大版本号):

Docs.GroupBy(x => x.Name)
    .Select(g => g.OrderByDescending(x => x.VersionNumber).First())

您的代码无效,因为您选择的是最大版本号的值(即int),而不是选择具有最大版本号的doc。

答案 1 :(得分:0)

您可以按降序排序并获取结果的第一个元素,例如:

searchResult.Docs.GroupBy(x => x.PackageName).OrderByDescending(x => x.Max(x => x.VersionNumber)).FirstOrDefault();

答案 2 :(得分:0)

为了获取组的最新元素,查询是:

.GroupBy(x=>x.Name).Select(y=>y.OrderbyDescending(z=>z.Version).FirstorDefault());