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

时间:2013-06-06 06:30:29

标签: c# datatable

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

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

我收到以下错误。

  

聚合函数Sum()和Type:String。

的使用无效

我尝试使用

将列值转换为int
object sum = dttest.Compute("sum(Convert(Value, 'System.Int32'))","");

我又得到了另一个错误

  

聚合参数中的语法错误:期望单列参数   可能有'儿童'资格。

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

4 个答案:

答案 0 :(得分:8)

您可以使用LINQ to Datatable:

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

如何Sum具体名称的示例:

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

答案 1 :(得分:1)

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");

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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