使用DataTable.Compute时遇'System.Data.NameNode非聚合'错误求助
问题解决:DataTable.Compute 抛出“Expression 'System.Data.NameNode' is not an aggregate”异常
问题根源
你的代码存在两个关键问题:
- 未添加数据行:仅创建了DataTable的列结构,但未向表中添加任何数据行。
Compute执行非聚合表达式(如Column * 2)时,必须有至少一行匹配过滤条件才能完成计算,无匹配行时会触发该异常。 - 语法错误:
string filter = "Column = 1"行末尾缺少分号,会导致编译失败。
修复后的代码
string formula = "(Column * 2)"; DataTable dt = new DataTable(); // 建议指定列数据类型,避免隐式类型转换问题 dt.Columns.Add("Column", typeof(int)); // 添加匹配过滤条件的数据行 dt.Rows.Add(1); string filter = "Column = 1"; // 补充分号 var temp = dt.Compute(formula, filter); Console.WriteLine(temp); // 输出:2
额外说明
- 若需处理过滤条件无匹配行的场景,可改用聚合表达式兜底,比如
SUM(Column * 2),此时即使无匹配行也会返回0,不会抛出异常:var temp = dt.Compute("SUM(Column * 2)", filter); - 动态替换过滤值时(比如把1换成3),只需修改添加的行值和过滤条件,计算结果会自动对应为6。
内容的提问来源于stack exchange,提问作者Vivek Nuna
相关产品推荐
相关产品推荐

