我很难弄清楚如何在 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"]
最佳答案
您正在尝试过滤组本身(以查找哪些组的总和较大),而不是进入组的行。
因此,您需要将 Where()
在 GroupBy
之后打电话:
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)
.
关于c# - LINQ DataTable Sum In Where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3522849/