繁体   English   中英

LINQ DataTable Sum在Where子句中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM