LINQ条件求和计算 - 不能应用于'int'和'bool'类型的操作数

时间:2010-09-11 01:44:53

标签: linq conditional validationsummary

我正在尝试进行计算。我有一个捐赠(d)表,其中包含所需数量(d.QtyNeeded),我需要通过从捐赠者表中提取数量(qtyfilled)来确定仍然需要的物品数量。不是每个捐赠都有捐赠者,所以我需要一个条件语句来处理空值,因此总和将起作用。当我尝试编译时,我收到一个错误:*运算符' - '不能应用于'int'和'bool'类型的操作数。我在Linq还不是很好,我错过了什么或者有更好的方法吗?

QtyOpen = d.QtyNeeded - (from dv in db.Donors
                                    select dv).All(v => v.QtyFilled == null)
                                    ? 0
                                    : (from dv in db.Donations
                                       select dv.QtyFilled).Sum()

2 个答案:

答案 0 :(得分:0)

问题不是LINQ语句,而是减法运算符的优先级。考虑这个例子:

int result = quantity - true ? 0 : otherValue;

由于完全相同的原因,无法编译,运算符' - '不能应用于'int'和'bool'类型的操作数。解决方案是简单地将条件语句分组为parens:

int result = quantity - (true ? 0 : otherValue);

因此,您的示例应该通过在整个条件运算符语句周围添加parens来编译。

答案 1 :(得分:0)

尝试通过在select:

中添加where来过滤掉初始选择中的空值
QtyOpen = d.QtyNeeded - (from dv in db.Donors 
                         where dv.QtyFilled != null
                         select dv.QtyFilled).Sum();