2015-05-04 57 views
0

我想确定哪些发票仍有余额。我将通过实体框架通过发票并尝试计算哪些小计的金额大于应用的付款金额。LINQ混乱与总结和比较

我写了下面的5测试用例

var test1 = _invoiceRepository.Where(x => x.Subtotal > 0); 
var test2 = _invoiceRepository.Where(x => x.Payments.Sum(y => y.Amount) > 0); 
var test3 = _invoiceRepository.Where(x => x.Payments.Sum(y => y.Amount) < 60); 
var test4 = _invoiceRepository.Where(x => x.Payments.Sum(y => y.Amount) < x.Subtotal); 
var test6 = _invoiceRepository.Where(x => x.Payments.Sum(y => y.Amount) == x.Subtotal); 
var test7 = _invoiceRepository.Where(x => x.Payments.Sum(y => y.Amount) != x.Subtotal); 

结果返回这个数字发票

test1: 392 
test2: 216 
test3: 126 
test4: 0 
test6: 215 
test7: 177 

测试1说,我有发票,有大于0

分类汇总

测试2 & 3表示我已将付款应用于发票,并且我可以正确地将它们相加。

测试4是我困惑的地方。我无法获得任何记录,将表中的总和与小数进行比较。我试过各种各样的括号,但无济于事。

测试6 & 7被建议和那些工作,但如果付款少于总和呢?或更大(发生了什么)?

如何修改我的LINQ以返回有余额的发票?

在此先感谢!

+0

你确定'_invoiceRepository'记录有余额吗? – dasblinkenlight

+0

test1确认392个发票中有392个具有小计。 –

回答

1

请注意,test4test5是相同的表达式。

但是万一这是一个粘贴错误,是不是付款总额等于小计?你没有考虑到平等的情况。

var test6 = _invoiceRepository.Where(x => x.Payments.Sum(y => y.Amount) == x.Subtotal); 
+0

你对** test4 **和** test5 **是正确的,显示了一些替代品。 ** Test6 **确实有效!但是,为什么不能比较大于或小于比较的工作?没有付款的情况导致**小于**不返回任何值。 –

+1

我已经找到了解决这个问题的解决方案,但我并不困惑。 'var test5 = _invoiceRepository.Where(x =>!x.Payments.Any()|| x.Payments.Sum(y => y.Amount)

+0

我以为你是寻找该表达式:'var test5 = _invoiceRepository.Where(x => x.Subtotal> = x.Payments.Sum(y => y.Amount));'(注意小于或等于号) – Joanvo