我有以下查询
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.我在这里错过了一些东西吗?
感谢您的帮助。
答案 0 :(得分:5)
问题是,如果没有要汇总的记录,SQL中的SUM
将返回null
。
你需要作弊。
尝试:
((int?)p.PayOuts.Sum(item => item.AmountPaid)).GetValueOrDefault()
或以稍微不同的方式书写
((int?)p.PayOuts.Sum(item => item.AmountPaid) ?? 0)