我有下表
ID Amt Received SchoolAmt
-- ---- -------- -------
2 55 N
2 88 Y 7
2 44 N 6
3 5 N
3 9 N
4 5 N 32
5 33 Y
6 43 N
7 54 N 66
对于给定的ID,我需要找到Max Amount,然后检查它是否标记为Y,如果是,则将结果标记为布尔值为false。
这样做的一种方法是:
db.Exp.
Where(x => x.ID == id)
.OrderByDescending(x => x.Amt)
.Take(1)
.Any(x => x.Received == "Y");
有效但我还需要补充一点,SchoolAmt也应该大于0。
为什么以下不起作用:
db.Exp.
Where(x => x.ID == id)
.OrderByDescending(x => x.Amt)
.Take(1)
.Any(x => x.Received == "Y" && x => x.SchoolAmt > 0);
当我尝试输入x => x.SchoolAmt> 0 Visual Studio不允许它,因为它似乎是不正确的syntex。
答案 0 :(得分:1)
尝试
.Any(x => x.Received == "Y" && x.SchoolAmt > 0);
答案 1 :(得分:0)
谓词应写成:
.Any(x => x.Received == "Y" && x.SchoolAmt > 0);
这是一个单一的委托,它被映射到一个类似于:
的函数static bool someCompilerGeneratedName(YourClass x)
{
return x.Received == "Y" && x.SchoolAmt > 0;
}
由于这是一个单独的委托和单个方法,因此您只需要在开头创建lambda的=>
。两个标准检查使用相同的变量(x)。
答案 2 :(得分:0)
我建议通过Nuget添加MoreLinq库,这将为您提供MaxBy / MinBy扩展,然后使用以下
db.Exp.
Where(x => x.ID == id)
.MaxBy(x => x.Amt)
.Any(x => x.Received == "Y" && x.SchoolAmt > 0);