2010-09-11 39 views
1

我试图执行计算。我有一个包含Quantity Needed(d.QtyNeeded)的捐赠表(d.QtyNeeded),我需要通过从捐助者表中提取填充数量(qtyfilled)来确定仍需要的项目数量。并非所有捐赠都有捐助者,所以我需要一个有条件的声明来处理空值,这样总和才有效。当我尝试编译时,出现错误:*运算符' - '不能应用于'int'和'bool'类型的操作数。我在Linq方面并不擅长,但我错过了什么或者有更好的方法?LINQ条件和计算 - 不能应用于'int'和'bool'类型的操作数

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

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

int result = quantity - true ? 0 : otherValue; 

这无法编译的确切同样的原因,操作“ - ”不能应用于类型“诠释”和“布尔”的操作数。该解决方案是简单地组中括号的条件语句:

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

所以,你应该例如通过围绕整个条件运算符语句添加括号编译。

+0

我尝试这样做,它默认为0,即使QtyFilled查询返回2.我可能没有正确执行。谢谢。 QtyOpen = d.QtyNeeded - (true?0 :(从dv in db.DonationVolunteerEntities 其中dv.DonationID == d.DonationID select dv).All(v => v.QtyFilled == null) ?0 : (从dv在db.DonationVolunteerEntities 选择dv.QtyFilled).Sum()), – scottrakes 2010-09-11 02:09:32

+0

我看到我做错了。你的解决方案很完美。谢谢。 – scottrakes 2010-09-11 02:15:40

0

尝试通过在选择加入其中筛选出在初次选择的空值:

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