LINQ获取金额的最大值但返回名称

时间:2012-01-13 16:57:10

标签: linq

我有2列 名称和金额

我喜欢linq根据具有最大金额的人返回姓名。

到目前为止,我有以下内容:

    string name = (from nm in bg
           select nm.Name).Max(Amount);

显然无效。

谢谢。

3 个答案:

答案 0 :(得分:1)

string name = (from nm in bg
               where nm.Amount == bg.Max(i=>i.Amount)
           select nm.Name)

string name = (from nm in bg
               orderby nm.Amount desc
           select nm.Name).First()

答案 1 :(得分:1)

我认为最快的方法就是这样(找到最大金额,然后查找具有最大金额,双向遍历的项目,并且是O(n)):

decimal amount = bg.Max(x=>x.Amount);
var name = bg.First(x=>x.Amount == amount).Name; // O(n)

你也可以这样做:

// O(n^2) in worst case, O(n) in best case
bg.First(x=>x.Amount == bg.Max(x=>x.Amount)).Name;

bg.OrderByDescending(x=>x.Amount).First().Name; // O(n log n) in all situation

答案 2 :(得分:0)

表达式

bg.OrderByDescending(nm => nm.Amount).First().Name

将获得您想要的内容,但如果bg为空则会抛出。如果这是一个问题,请使用

var topNm = bg.OrderByDescending(nm => nm.Amount).FirstOrDefault();

并检查topNm是否无效。