聚合函数Sum()和Type:String的使用无效

我有一个数据表,一列包含int值。 我没有使用任何数据类型指定列。 当我执行以下操作时。

object sum = dttest.Compute("sum(Value)", ""); 

我收到了以下错误。

聚合函数Sum()和Type:String的使用无效。

我尝试使用将列值转换为int

 object sum = dttest.Compute("sum(Convert(Value, 'System.Int32'))",""); 

我又得到了另一个错误

聚合参数中的语法错误:期望具有可能的“子”限定符的单个列参数。

当我为列指定数据类型时,第一个代码将返回正确的值。 但在我的情况下,我无法指定列数据类型。 有人有解决方案吗?

您可以使用LINQ to Datatable:

  var result = dttest.AsEnumerable() .Sum(x => Convert.ToInt32(x["Value"])); 

示例如何为特定名称Sum

  var result = dttest.AsEnumerable() .Where(r => r.Field("Name") == "FilterName") .Sum(x => Convert.ToInt32(x["Value"])); 

尝试

 object sum = dttest.Compute("Sum(Value)", "[Value] IS NOT NULL"); 

示例代码

  static DataTable GetTable() { DataTable table = new DataTable(); table.Columns.Add("Value", typeof(int)); table.Columns.Add("Name", typeof(string)); table.Rows.Add(null, "a"); table.Rows.Add(50, "a"); table.Rows.Add(10, "a"); table.Rows.Add(21, "b"); table.Rows.Add(100, "b"); return table; } static void Main(string[] args) { DataTable dt =GetTable(); var str = dt.Compute("Sum(Value)", "Name='a' and Value is not null"); } 

你不能用转换来调用总和,但你可以在下面尝试

 DataTable dt =GetTable(); dt.Columns.Add("temp", typeof(int), "Convert(Value, 'System.Int32')"); var str = dt.Compute("Sum(temp)", "Name='a' and Value is not null"); 

尝试

 dttest.Compute("Sum(Convert([Value], 'System.Int32'))","[Value] IS NOT NULL"); 

当程序尝试将一个声明为字符串的数据表列相加时会发生此错误。
使用以下代码对字符串列进行计算操作。

 dtTable.Compute("Sum(Convert(" + col_Name + ", 'System.Int32')","");