[英]LINQ DataTable Sum In Where Clause
我有一个艰难的时间弄清楚如何在DataTable上执行LINQ查询并返回一个完整的行,同时对一个总和进行WHERE子句测试。
我的代码:
transactionsToRemove.AddRange(paymentTransactionResults
.AsEnumerable()
.Where(...)
.GroupBy(r => (decimal)r["AccountNumber"]));
每个AccountNumber有多个交易,我需要将它们相加并确定它们是否小于用户输入的金额(为了我的目的,它被称为balanceGreaterThan)。 我找不到任何有人做过这种事情的例子。
提前谢谢,SO。
编辑 :我的道歉 - 我需要总结的列称为“平衡”
编辑2 :最终代码
transactionsToRemove.AddRange(paymentTransactionResults
.AsEnumerable()
.GroupBy(r => r.Field<string>("AccountNumber"))
.Where(g => g.Sum(r => r.Field<decimal>("Balance")) < balanceGreaterThan)
.SelectMany(g => g));
我不得不改变GroupBy使用r.Field而不是r [“AccountNumber”]
您正在尝试过滤组本身(以查找哪些组具有较大的总和),而不是进入组的行。
因此,您需要在GroupBy
之后放置Where()
调用:
transactionsToRemove.AddRange(paymentTransactionResults
.AsEnumerable()
.GroupBy(r => (decimal)r["AccountNumber"])
.Where(g => g.Sum(r => r.Field<decimal>("Balance") < balanceGreaterThan));
编辑 :如果你想得到IEnumerable<DataRow>
(而不是IEnumerable<IGrouping<DataRow>>
),你需要添加.SelectMany(g => g)
。
transactionsToRemove.AddRange(paymentTransactionResults
.AsEnumerable()
.GroupBy(r => (decimal)r["AccountNumber"])
.Where(g => g.Sum(r => (decimal)r["Balance"]) <= someInput)
.SelectMany(g => g));
我想你想要的东西:
transactionsToRemove.AddRange(paymentTransactionResults
.AsEnumerable()
.GroupBy(r => (decimal)r["AccountNumber"]));
.Where(grp => grp.Sum(r => r["amount"]) < balanceGreaterThan);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.