datatable 中有一列是string类型的数字,想对这列求和用datatable.Compute("Sum(Convert(列名,'System.Int32'))", "")却总是"报聚合参数中的语法错误: 需要具有可能的“Child”限定符的单个列参数"错误,是不是Compute中函数不能嵌套?请问我该如何做才能得到这列的和,前提是用Compute。

解决方案 »

  1.   

      _Table.Columns.Add(new DataColumn("SUM列名", typeof(Int32), "Convert(列名,'System.Int32')"));            object aa = _Table.Compute("Sum(SUM列名)", "");
      

  2.   

    楼上的这样做是添加列,我也想过添加一列来解决.但是我这个表中有很多列都需要求和,所以,如果这样做的话需要添加很多列。
    有没有办法就在Table.Compute中直接解决呢?这样就只要给几个相应的变量就行了。
      

  3.   

    http://msdn.microsoft.com/zh-cn/library/system.data.datatable.compute.aspxhttp://msdn.microsoft.com/zh-cn/library/system.data.datacolumn.expression.aspx参考下面的试试
      

  4.   

    这个我看了,MSDN里就有,可是遇到Sum套Convert如Compute("Sum(Convert(列名,'System.Int32'))", "")这种形式的时候就不知道如何处理了.
      

  5.   

    那你直接用sqlcommand行么,用select语句可以求出来的
      

  6.   

    DataColumn c1 = new DataColumn("id");
    DataColumn c2 = new DataColumn("B", System.Type.GetType("System.Int32"));dataTable.Compute("Sum(B)", "true");
      

  7.   

    expression参数中字段的数据类型问题,例如Sum(字符类型)就会报这个错。
      

  8.   

    也可使用linq 
    var p= dt.AsEnumerable();
      

  9.   

    试试自己写个函数  效率应该差不多.double ColumnSum(DataTable dt, string ColumnName)
    {
        double d = 0;
        foreach (DataRow row in dt.Rows)
        {
            d += double.Parse(row[ColumnName]);
        }
        return d;
    }
      

  10.   

    改一个语法错误: double.Parse(row[ColumnName].ToString())double ColumnSum(DataTable dt, string ColumnName)
    {
        double d = 0;
        foreach (DataRow row in dt.Rows)
        {
            d += double.Parse(row[ColumnName].ToString());
        }
        return d;
    }
      

  11.   

    lzsh0622的还是用到了foreach循环,我只是想在datatable.Compute()一句话中实现。
    另,wuyq11提到的linq,由于我们没用.NET Framework 3.5,所以也没办法实现.
      

  12.   


      zgke 的方法是正确的,因为 Expression 表达式中 没有办法 在聚合函数中使用  Convert 函数报聚合参数中的语法错误: 需要具有可能的“Child”限定符的单个列参数这个错误写的也很清楚,意思是聚合函数的参数不正确聚合函数的参数 只能是DataTable 的一个列,or DataTable 相关子表的一个列如果你希望使用 Compute 来实现功能,那只能增加列
      

  13.   

    虽然没有解决我的问题,但是还是要多谢以上各位给我指出Compute的用法,结贴发分了.