紧急!DataTable.Compute()中expression参数不能使用convert函数对String转换再聚合计算??
DataTable dtt = new DataTable();
dtt.Columns.Add("field1",typeof(String));
dtt.Columns.Add("field2",typeof(int));
DataRow dr= dtt.NewRow();
dr["field1"] = "10";
dr["field2"] = 20;
dtt.Rows.Add(dr);
dtt.Compute("Sum(convert(field1,'System.Int32'))","").ToString(); //执行到这里报错
错误提示为:
聚合参数中的语法错误: 需要具有可能的“Child”限定符的单个列参数。
但是没有转换的语句就可以通过
dtt.Compute("Sum(field2)","").ToString();
这是为什么?怎么解决,请高手赐招,谢谢
问题点数:50、回复次数:6Top
1 楼magicsnake(北极狐)回复于 2006-03-14 14:31:29 得分 0
大家帮帮忙啊,谢谢了Top
2 楼lidong6(立冬)回复于 2006-03-14 15:50:40 得分 22
你为什么不直接把这一列设置为Int32?
没有试过在先Convert再SUM,你可以再增加一列只是Convert,然后再SUM这一列.Top
3 楼MyLf(不睡觉的鱼)回复于 2006-03-14 16:56:53 得分 22
其表达式应该只能是基本的Sql表达式,System.Int32是.Net的数据类型,又不是数据库的数据类型。
不错才怪。。。Top
4 楼boyxia(>>雪饮狂刀 [抵制日货]<<)回复于 2006-03-14 17:08:18 得分 6
用sqlserver的转换语法Top
5 楼magicsnake(北极狐)回复于 2006-03-14 17:37:53 得分 0
唉,那么就是不支持转换后再计算的方式了......
我觉得不是关于System.Int32这种数据类型到底是属于数据库或者.net的问题,因为不使用聚合函数,单独使用Convert可以在DataTable.Columns.Add()的expression中使用.而且DataTable里的内容已经是存在客户端的内存中独立于数据库了,对于这样的类型完全能够解析出来吧,就像在表达式中单独使用convert一样,我觉得只是这个Compute函数的解析功能还不够强大,没有扩展到吧.
没有设置为Int32是考虑到一些通用性的问题,毕竟String处理起来比较方便,可以随时转换,既然现在转换不了,只能重新考虑这方面的设计了.
谢谢两位.晚上结帖Top
6 楼magicsnake(北极狐)回复于 2006-03-14 17:43:56 得分 0
to boyxia(>>雪饮狂刀 [抵制日货]<<)
表达式里面只支持convert(ColumnName,type)的转换方式,与数据库类型无关,我已经尝试过了,谢谢支持Top




