我有下表:
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();
Run Code Online (Sandbox Code Playgroud)
给定一个ID,我需要找到给定id的最大Amt,然后检查它是否为Y,如果是,则返回true,否则返回false.
Joa*_*son 18
这应该做到;
db.Exp.
Where(x => x.ID == id).
OrderByDescending(x => x.Amt).
Take(1).
Any(x => x.Received == "Y");
Run Code Online (Sandbox Code Playgroud)
不幸的是,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;
Run Code Online (Sandbox Code Playgroud)
请注意,这是做什么的话你的问题问:
Received这是不一样的:
另请注意,如果没有包含该ID的记录,则会抛出异常.
如果你想在LINQ to SQL等中做到这一点,你可能最好订购:
var highest = db.Exp.Where(rs => rs.ID == id)
.OrderByDescending(rs => rs.Amt)
.FirstOrDefault();
return highest != null && highest.Received;
Run Code Online (Sandbox Code Playgroud)
你不希望如果你正在使用LINQ to对象,因为它会命令所有的结果,当你只是想找到的最高金额,结果做到这一点.