我正在尝试进行计算。我有一个捐赠(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()
答案 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();