我有2列 名称和金额
我喜欢linq根据具有最大金额的人返回姓名。
到目前为止,我有以下内容:
string name = (from nm in bg
select nm.Name).Max(Amount);
显然无效。
谢谢。
答案 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
是否无效。