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的解决方案

Linq查询,用于检索具有最大值的所有对象

您可以按属性分组,然后按键对分组排序,并获取第一个组的内容,如下所示:

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();