DataTable.Compute强大的功能

以前还真没想到DataData.Compute 具有这么多的功能

1:聚合函数”Sum()”

2:自由计算表达式“20*30+1

3bool表达式“1=2

4IFF逻辑表达式 IIF(20>1000, 0, 1)” //还支持IsNullTrimSubString

一个小应用:让DataTable模拟ExcelFormula功能。

Excel中的Formula功能强大,如果能让DataTable有类似的功能就好了。大部分事件DataTable只是用作数据载体,其实很少用它做计算。DataTable提供的函数Compute就提供了功能强大的计算功能。

Compute函数的参数就两个:Expression,和Filter

Expresstion是计算表达式,关于Expression的详细内容请看这里“http://msdn2.microsoft.com/zh-cn/library/system.data.datacolumn.expression(VS.80).aspx”。而Filter则是条件过滤器,类似sqlWhere条件。

1: 这里详细介绍的就是Expresstion

先看最简单的用法,使用聚合函数。这个聚合函数就是报表或者Excel中常用的函数,比如SumAvg等等。对于数据列,Datatable可以方便的进行计算,比如DataTable.Cumpute(“Sum(1)”,”1>0”); 对于简单的统计功能,这些函数就足够用了。(其他提供的函数有minmaxcount,求方差,标准偏差等等)。这个功能常用,倒也不奇怪。

再看“自由表达式”计算。把数学计算表达式写成字符串,然后直接投入Compute函数计算,就可以得到计算结果。这样,动态生成的计算表达式就可以计算出来了。比方说要计算“列1×30+20+2”或者是纯粹的数学计算。

出了计算出具体的结果,Compute函数还能进行逻辑计算。比方说这个表达式就能返回falseCompute(“1=2”,”true”); 这个的用法可能想上边的情形差不多,在自由组装一些条件的时候可以得到结果。

Excel中,还经常用到的就是LogicTest功能了,可以指定一些逻辑表达式,比如这样的:“IF(20>1000, 0, 1)”。而这个功能要是放到DataTable中该如何实现呢?也是用Compute,这样写就可以了:“IIF(20>1000, 0, 1)”。

DataTable里面如果实现“IF(C102=0,0,C105/C102*30)”就用上边的这些技术点就可以了。

2:至于第二个参数Filter,就是一个简单的查询条件。比如,”true”, “Id>4”, “Name like ’%nd’ and sex=’male’”.

条件不可能很复杂,这些已经比较够用了。

以前用过的Marge什么的也不错,还可以作内连接,在数据量小,需要简单计算的情况下,这些功能很有用。

当然,如果逻辑极其复杂,DT的这点功能就不够了,还是得自己写逻辑(即使要实现“IF(C102=0,0,C105/C102*30)”,也是要自己写一点处理逻辑的,不过比较通用,写一次就好了)。

转载于:https://www.cnblogs.com/SoulStore/archive/2007/10/25/936827.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值