我有2列 名稱和金額LINQ獲得金額最大的回報,但名字
我喜歡的LINQ返回基於誰擁有最大數量的名稱。
到目前爲止,我有以下幾點:
string name = (from nm in bg
select nm.Name).Max(Amount);
這顯然是行不通的。
謝謝。
我有2列 名稱和金額LINQ獲得金額最大的回報,但名字
我喜歡的LINQ返回基於誰擁有最大數量的名稱。
到目前爲止,我有以下幾點:
string name = (from nm in bg
select nm.Name).Max(Amount);
這顯然是行不通的。
謝謝。
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()
表達
bg.OrderByDescending(nm => nm.Amount).First().Name
會得到你想要的東西,但會拋出如果bg
是空的。如果這是一個問題,使用
var topNm = bg.OrderByDescending(nm => nm.Amount).FirstOrDefault();
,並檢查topNm
爲無效。
我能想到最快的辦法是,因爲這(發現最大金額,然後找具有最高量,雙向穿越項目,爲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