我有下表:
ID Amt Received
-- ---- --------
2 55 N
2 88 Y
2 44 N
3 5 N
3 9 N
4 5 N
5 33 Y
6 43 N
7 54 N
var result = (from rs in db.Exp
where rs.ID == id
&& rs.Received == true
select rs).Max().Any();
给定一个ID,我需要找到给定id的最大Amt,然后检查它是否为Y,如果是,则返回true,否则返回false。
答案 0 :(得分:18)
这应该这样做;
db.Exp.
Where(x => x.ID == id).
OrderByDescending(x => x.Amt).
Take(1).
Any(x => x.Received == "Y");
答案 1 :(得分:6)
不幸的是,LINQ没有提供“max by a attribute”方法。 MoreLINQ使用其MaxBy
运算符,但当然无法将其转换为SQL。因此,如果这是一个LINQ to SQL(或其他)查询,您将需要一个不同的方法。但是,如果它已经是LINQ to Objects,那么:
return db.Exp.Where(rs => rs.ID == id)
.MaxBy(rs => rs.Amt)
.Received;
请注意,这是在做你问题的单词:
Received
这不与:
相同另请注意,如果 no 记录中包含该ID,则会引发异常。
如果你想在LINQ to SQL等中做到这一点,你可能最好订购:
var highest = db.Exp.Where(rs => rs.ID == id)
.OrderByDescending(rs => rs.Amt)
.FirstOrDefault();
return highest != null && highest.Received;
如果您正在使用LINQ to Objects,不想要这样做,因为当您只想查找具有最高金额的结果时,它会对所有结果进行排序。
答案 2 :(得分:3)
你需要告诉它你想要的Max
。
var result =
(from rs in db.Exp
where rs.ID == id && rs.Received
select rs)
.Max(row => row.Amt) == Y;
您根本不需要.Any()
答案 3 :(得分:0)
// "I need to find the max Amt for a given id..."
var elementWithMaxAmount =
db.Exp
.Where(x => x.ID == id)
.OrderByDescending(x => x.Amount)
.FirstOrDefault();
// "... and then check if it is Y"
var result = (elementWithMaxAmount != null &&
elementWithMaxAmount.Received == "Y");