LINQ 对 Sum 和比较的混淆
LINQ Confusion with Sum and comparison
我正在尝试确定哪些发票仍有余额。我正在通过 Entity Framework 查看发票并尝试计算哪些发票的小计大于应用的付款金额。
我写了以下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);
结果return这个发票数量
test1: 392
test2: 216
test3: 126
test4: 0
test6: 215
test7: 177
测试 1 说我有小计大于 0 的发票。
测试 2 和 3 表明我已将付款应用于发票,并且我可以正确地计算它们的总和。
测试 4 是我感到困惑的地方。我无法获得任何记录 returned 将总和与 table 中的小数进行比较。我试过用括号括住所有内容的变体,但无济于事。
建议进行测试 6 和 7,这些测试有效,但如果付款少于总和怎么办?或更大(发生了什么)?
如何修改我的 LINQ 以 return 有余额的发票?
提前致谢!
注意test4
和test5
是同一个表达式。
但是万一这是粘贴错误,付款总和不等于小计吗?你没有考虑平等的情况。
var test6 = _invoiceRepository.Where(x => x.Payments.Sum(y => y.Amount) == x.Subtotal);
我正在尝试确定哪些发票仍有余额。我正在通过 Entity Framework 查看发票并尝试计算哪些发票的小计大于应用的付款金额。
我写了以下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);
结果return这个发票数量
test1: 392
test2: 216
test3: 126
test4: 0
test6: 215
test7: 177
测试 1 说我有小计大于 0 的发票。
测试 2 和 3 表明我已将付款应用于发票,并且我可以正确地计算它们的总和。
测试 4 是我感到困惑的地方。我无法获得任何记录 returned 将总和与 table 中的小数进行比较。我试过用括号括住所有内容的变体,但无济于事。
建议进行测试 6 和 7,这些测试有效,但如果付款少于总和怎么办?或更大(发生了什么)?
如何修改我的 LINQ 以 return 有余额的发票?
提前致谢!
注意test4
和test5
是同一个表达式。
但是万一这是粘贴错误,付款总和不等于小计吗?你没有考虑平等的情况。
var test6 = _invoiceRepository.Where(x => x.Payments.Sum(y => y.Amount) == x.Subtotal);