2015-05-04 59 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