【问题标题】:LINQ Conditional Sum Calculation - cannot be applied to operands of type 'int' and 'bool'LINQ 条件和计算 - 不能应用于“int”和“bool”类型的操作数
【发布时间】:2010-09-11 01:44:52
【问题描述】:

我正在尝试执行计算。我有一个包含所需数量 (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()

【问题讨论】:

    标签: linq conditional validationsummary


    【解决方案1】:

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

    int result = quantity - true ? 0 : otherValue;
    

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

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

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

    【讨论】:

    • 我试过了,即使 QtyFilled 查询返回 2,它也默认为 0。我的实现可能不正确。谢谢。 QtyOpen = d.QtyNeeded - (true ? 0 : (from dv in db.DonationVolunteerEntities where dv.DonationID == d.DonationID select dv).All(v => v.QtyFilled == null) ? 0 : (来自 dv in db.DonationVolunteerEntities 选择 dv.QtyFilled).Sum()),
    • 我看到了我做错了什么。您的解决方案非常完美。谢谢。
    【解决方案2】:

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

    QtyOpen = d.QtyNeeded - (from dv in db.Donors 
                             where dv.QtyFilled != null
                             select dv.QtyFilled).Sum();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-29
      相关资源
      最近更新 更多