2011-11-03 58 views
6

我有以下查询LINQ到与拉姆达和作为SQL WHERE条件

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且其合计采购金额大于所有产品我们支付的金额(我们代表其他人出售产品并全额或部分支付)。问题是,如果特定产品的支出表中没有条目,则该产品不会出现在结果列表中。但是,如果我将支出插入支出表中,那么该产品将显示在产品列表中。它几乎就像使用一个空集合的总和不会像期望的那样评估,即0。我在这里错过了什么吗?

感谢您的帮助。

+0

什么是生成的SQL? – svick

回答

5

问题是如果没有记录求和,SQL中的SUM返回null

你需要作弊一点点。

尝试:

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

或写在一点点不同的方式

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

+1;但我认为你仍然需要为第二种情况施加压力才能使外部C#开心......? –

+0

@ MerlynMorgan-Graham,你是对的。 –

+0

感谢您的帮助,完美地工作。 – Peuge