c# - LINQ DataTable Sum In Where 子句

标签 c# .net linq

我很难弄清楚如何在 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/

相关文章:

c# - 如何根据 DateTime 值的接近度将两个列表中的所有对象匹配成两个对

c# - 如何等待 webclient OpenReadAsync 完成

c# - 每 X 秒执行一次指定的函数

.net - Entity Framework Code First 如何确定多对多联结表名称?

c# - 使用 LINQ 选择不同列的唯一值

linq - 如何将 IGrouping<Key, Value> 映射到 IGrouping<Key, Value>?

c# - 如何验证字典列表是否包含具有特定键的字典 - C#

c# - Visual C# 2010 Express 中不完整的 System.Collections.Generic

.net - 如何设置测试SAS数据库的环境?

.net - 同题不同答案,考试70-515