1

我正在尝试执行计算。我有一个包含所需数量 (d.QtyNeeded) 的捐赠 (d) 表,我需要通过从捐赠者表中提取填充数量 (qtyfilled) 来确定仍需要的项目数量。不是每个捐赠都有捐赠者,所以我需要一个条件语句来处理空值,这样总和才会起作用。当我尝试编译时,我收到一个错误:*Operator '-' cannot be applied to 'int' and '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()
4

2 回答 2

0

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

int result = quantity - true ? 0 : otherValue;

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

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

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

于 2010-09-11T01:58:52.513 回答
0

尝试通过在选择中添加 where 来过滤掉初始选择中的空值:

QtyOpen = d.QtyNeeded - (from dv in db.Donors 
                         where dv.QtyFilled != null
                         select dv.QtyFilled).Sum();
于 2010-09-11T02:16:49.330 回答