Datatable.Compute中对string列求和 datatable 中有一列是string类型的数字,想对这列求和用datatable.Compute("Sum(Convert(列名,'System.Int32'))", "")却总是"报聚合参数中的语法错误: 需要具有可能的“Child”限定符的单个列参数"错误,是不是Compute中函数不能嵌套?请问我该如何做才能得到这列的和,前提是用Compute。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 _Table.Columns.Add(new DataColumn("SUM列名", typeof(Int32), "Convert(列名,'System.Int32')")); object aa = _Table.Compute("Sum(SUM列名)", ""); 楼上的这样做是添加列,我也想过添加一列来解决.但是我这个表中有很多列都需要求和,所以,如果这样做的话需要添加很多列。有没有办法就在Table.Compute中直接解决呢?这样就只要给几个相应的变量就行了。 http://msdn.microsoft.com/zh-cn/library/system.data.datatable.compute.aspxhttp://msdn.microsoft.com/zh-cn/library/system.data.datacolumn.expression.aspx参考下面的试试 这个我看了,MSDN里就有,可是遇到Sum套Convert如Compute("Sum(Convert(列名,'System.Int32'))", "")这种形式的时候就不知道如何处理了. 那你直接用sqlcommand行么,用select语句可以求出来的 DataColumn c1 = new DataColumn("id");DataColumn c2 = new DataColumn("B", System.Type.GetType("System.Int32"));dataTable.Compute("Sum(B)", "true"); expression参数中字段的数据类型问题,例如Sum(字符类型)就会报这个错。 也可使用linq var p= dt.AsEnumerable(); 试试自己写个函数 效率应该差不多.double ColumnSum(DataTable dt, string ColumnName){ double d = 0; foreach (DataRow row in dt.Rows) { d += double.Parse(row[ColumnName]); } return d;} 改一个语法错误: 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;} lzsh0622的还是用到了foreach循环,我只是想在datatable.Compute()一句话中实现。另,wuyq11提到的linq,由于我们没用.NET Framework 3.5,所以也没办法实现. zgke 的方法是正确的,因为 Expression 表达式中 没有办法 在聚合函数中使用 Convert 函数报聚合参数中的语法错误: 需要具有可能的“Child”限定符的单个列参数这个错误写的也很清楚,意思是聚合函数的参数不正确聚合函数的参数 只能是DataTable 的一个列,or DataTable 相关子表的一个列如果你希望使用 Compute 来实现功能,那只能增加列 虽然没有解决我的问题,但是还是要多谢以上各位给我指出Compute的用法,结贴发分了. 关系数据长度 将3DMax中.ase格式的文件转换成.xaml格式的文件 那位大哥有门锁系统接口函数编程经验 C#判断installshiled安装的服务是否存在并且获取服务 最后40分,谁要拿去,我受不了了,到现在没搞出来,大家帮帮忙啊! 求助!C#编程实现文件的签出和签入 窗体信息调用 序列化问题 C#分发问题!急!!!!!!!!请高手进入!!!!!!!在线等待!!!!!!!!! 小问题 如何让容器控件随窗体大小变化而变化? VS 2008 WebBrowser相关
有没有办法就在Table.Compute中直接解决呢?这样就只要给几个相应的变量就行了。
DataColumn c2 = new DataColumn("B", System.Type.GetType("System.Int32"));dataTable.Compute("Sum(B)", "true");
var p= dt.AsEnumerable();
{
double d = 0;
foreach (DataRow row in dt.Rows)
{
d += double.Parse(row[ColumnName]);
}
return d;
}
{
double d = 0;
foreach (DataRow row in dt.Rows)
{
d += double.Parse(row[ColumnName].ToString());
}
return d;
}
另,wuyq11提到的linq,由于我们没用.NET Framework 3.5,所以也没办法实现.
zgke 的方法是正确的,因为 Expression 表达式中 没有办法 在聚合函数中使用 Convert 函数报聚合参数中的语法错误: 需要具有可能的“Child”限定符的单个列参数这个错误写的也很清楚,意思是聚合函数的参数不正确聚合函数的参数 只能是DataTable 的一个列,or DataTable 相关子表的一个列如果你希望使用 Compute 来实现功能,那只能增加列