2012-01-13 55 views
1

我有2列 名稱和金額LINQ獲得金額最大的回報,但名字

我喜歡的LINQ返回基於誰擁有最大數量的名稱。

到目前爲止,我有以下幾點:

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

這顯然是行不通的。

謝謝。

回答

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

表達

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

會得到你想要的東西,但會拋出如果bg是空的。如果這是一個問題,使用

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

,並檢查topNm爲無效。

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