Linq以SML与lambda sum作为where条件

时间:2011-11-03 19:05:12

标签: c# linq linq-to-sql

我有以下查询

from p in _context.Products
where p.Purchases.Sum(item => item.CCAmount) > 0 && p.Purchases.Sum(item => item.CCAmount) > p.PayOuts.Sum((item => item.AmountPaid)
select p;

基本上我正在尝试检索所有总和购买金额大于0并且其总购买金额大于我们支付的金额的产品(我们代表其他人销售产品并全额支付或部分付款)。问题是,如果特定产品的支付表中没有条目,那么该产品不会出现在结果列表中。但是,如果我在支付表中插入支付,那么该产品将显示在产品列表中。它几乎就像在空集合上使用sum一样,不会像人们期望的那样进行评估,即为0.我在这里错过了一些东西吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:5)

问题是,如果没有要汇总的记录,SQL中的SUM将返回null

你需要作弊。

尝试:

((int?)p.PayOuts.Sum(item => item.AmountPaid)).GetValueOrDefault()

或以稍微不同的方式书写

((int?)p.PayOuts.Sum(item => item.AmountPaid) ?? 0)