Linq查询,用于检索具有最大值的所有对象
本文关键字:最大值 对象 查询 用于 检索 Linq | 更新日期: 2023-09-27 18:18:32
目前我有一个List
的对象,我需要找到所有出现的最大值。
目前我的解决方案是:
Foo maxFoo = list.OrderByDescending(foo => foo.A).First();
List<Foo> maxFoos = new List<Foo>();
foreach(Foo foo in list) {
if (foo.A.Equals(maxFoo.A)) {
maxFoos.Add(foo);
}
}
但是我想知道是否有一种方法可以在单个Linq
表达式中做到这一点。
我读过的所有资源都是指获取一个对象的最大值。
注意:目前,我想知道一个不依赖于MoreLinq的解决方案
您可以按属性分组,然后按键对分组排序,并获取第一个组的内容,如下所示:
var res = list
.GroupBy(item => item.A)
.OrderByDescending(g => g.Key)
.First()
.ToList();
可以按A
分组,对该组进行排序,得到第一组中的元素,即A值最大的元素:
list
.GroupBy(x => x.A)
.OrderByDescending(grp=> grp.Key)
.First()
.Select(x => x);
这行得通:
var maxFoos =
list
.OrderByDescending(foo => foo.A)
.GroupBy(foo => foo.A)
.Take(1)
.SelectMany(foo => foo)
.ToList();