2015-10-21 36 views
2

目前我有一个List对象,其中我需要找到所有发生有最大值。c#Linq查询检索所有对象的最大值

目前我解决了这个一直以:

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

回答

2

您可以通过组属性,然后命令由键组的解决方案,并采取的内容第一个,是这样的:

var res = list 
    .GroupBy(item => item.A) 
    .OrderByDescending(g => g.Key) 
    .First() 
    .ToList(); 
2

,你可以按A,命令组,并获得元素的第一组,其对应于具有的最大值的元素:

list 
    .GroupBy(x => x.A) 
    .OrderByDescending(grp=> grp.Key) 
    .First() 
    .Select(x => x); 
1

此作品:

var maxFoos = 
    list 
     .OrderByDescending(foo => foo.A) 
     .GroupBy(foo => foo.A) 
     .Take(1) 
     .SelectMany(foo => foo) 
     .ToList();