聚合函数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')","");