Datatable.Compute小技巧
在个人版机房重构的过程中,大家最发愁的一件事无非就是上下机,结账和报表。那么在结账的过程中,最发愁的是否就数计算日结账单的数据和周结账的数据。还记得在第一遍机房收费系统的过程中用的是for 循环,但是现在考虑多了为了节省时间能不能不用那么长的循环直接用某个函数求和?所以带着这个问题,就进入了查找资料的过程。得知在Datatable中可以直接求出某行某列的和,所以这就是Datatable.Compute小技巧的由来。
那么接下来就进入DataTable.Compute的学习吧!
以前你肯定没想到DataTable.Compute具有这么多的功能
1:聚合函数”Sum()”
2:自由计算表达式“20*30+1”
3:bool表达式“1=2”
:IFF逻辑表达式” IIF(20>1000, 0, 1)” //还支持IsNull,Trim,SubString等
一个小应用:让DataTable模拟Excel的Formula功能。
Excel中的Formula功能强大,如果能让DataTable有类似的功能就好了。大部分事件DataTable只是用作数据载体,其实很少用它做计算。DataTable提供的函数Compute就提供了功能强大的计算功能。
Compute函数的参数就两个:Expression,和Filter。
Expresstion是计算表达式,
而Filter则是条件过滤器,类似sql的Where条件。
1: 这里详细介绍的就是Expresstion。
(1)先看最简单的用法,使用聚合函数。这个聚合函数就是报表或者Excel中常用的函数,比如Sum,Avg等等。对于数据列,Datatable可以方便的进行计算,比如DataTable.Cumpute(“Sum(列1)”,”列1>0”); 对于简单的统计功能,这些函数就足够用了。(其他提供的函数有min,max,count,求方差,标准偏差等等)。这个功能常用,倒也不奇怪。
(2)再看“自由表达式”计算。把数学计算表达式写成字符串,然后直接投入Compute函数计算,就可以得到计算结果。这样,动态生成的计算表达式就可以计算出来了。比方说要计算“列1×30+20+2”或者是纯粹的数学计算。
(3)除了计算出具体的结果,Compute函数还能进行逻辑计算。比方说这个表达式就能返回false:Compute(“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’ andsex=’male’”.条件不可能很复杂,这些已经比较够用了。
以前用过的Marge什么的也不错,还可以作内连接,在数据量小,需要简单计算的情况下,这些功能很有用。
当然,如果逻辑极其复杂,DT的这点功能就不够了,还是得自己写逻辑(即使要实现“IF(C102=0,0,C105/C102*30)”,也是要自己写一点处理逻辑的,不过比较通用,写一次就好了)。
:注意点,通过以上的讲解,是否对Datatable.Compute有了一定的了解,但是真的会运用了吗?接下来就进入我们的大拷问吧!
大家看一下表达式是否合法:
Sum (Quantity *UnitPrice)
答案是:No
如果必须针对两列或多列执行操作,则应该创建 DataColumn,并将它的 Expression属性设置为适当的表达式,然后针对结果列使用聚合表达式。在这种情况下,假定有一个名为“total”的 DataColumn,并且 Expression属性设置为:"Quantity * UnitPrice"
Compute 方法的表达式参数将为:Sum(total)
综上所述就是我对Datatable.Compute小技巧的理解,希望给大家带来方便!在今后的学习中会不断地完善,加油!
Datatable.Compute小技巧的更多相关文章
- FineUI小技巧(1)简单的购物车页面
起因 最初是一位 FineUI 网友对购物车功能的需求,需要根据产品单价和数量来计算所有选中商品的总价. 这个逻辑最好在前台使用JavaScript实现,如果把这个逻辑移动到后台C#实现,则会导致过多 ...
- .Net开发小技巧
.NET项目开发中的小技巧 1.不要频繁的创建对象...这个损失是巨大的...new太多了,后果比较严重. 2.打开数据库后要及时的关闭连接,如果你不能做到一个open后跟一个close,那也没关系, ...
- 牛腩新闻公布系统--学习Web的小技巧汇总
2014年11月10日,是个难忘的日子.这一天.小编的BS学习開始了.BS的开头,从牛腩新闻公布系统開始.之前学习的内容都是CS方面的知识,软考过后.開始学习BS,接触BS有几天的时间了,跟着牛腩老师 ...
- 牛腩新闻发布系统--学习Web的小技巧汇总
2014年11月10日,是个难忘的日子,这一天,小编的BS学习开始了,BS的开头,从牛腩新闻发布系统开始,之前学习的内容都是CS方面的知识,软考过后,开始学习BS,接触BS有几天的时间了,跟着牛腩老师 ...
- js几个小技巧和坑
蝴蝶书看了,也知道充满了毒瘤和糟粕,但该用还是得用. 实际写了几天,小技巧记录下来.都是在py里有直接答案,不会遇到的问题,没想到js里这么费事. 还是要多读<ES6标准入门> 1判断ob ...
- PowerDesigner 12小技巧-pd小技巧-pd工具栏不见了-pd修改外键命名规则-pd添加外键
PowerDesigner 12小技巧-pd小技巧-pd工具栏不见了-pd修改外键命名规则-pd添加外键 1. 附加:工具栏不见了 调色板(Palette)快捷工具栏不见了PowerDesigner ...
- 前端网络、JavaScript优化以及开发小技巧
一.网络优化 YSlow有23条规则,中文可以参考这里.这几十条规则最主要是在做消除或减少不必要的网络延迟,将需要传输的数据压缩至最少. 1)合并压缩CSS.JavaScript.图片,静态资源CDN ...
- Git小技巧 - 指令别名及使用Beyond Compare作为差异比较工具
前言 本文主要写给使用命令行来操作Git的用户,用于提高Git使用的效率.至于使用命令还是GUI(Tortoise Git或VS的Git插件)就不在此讨论了,大家根据自己的的喜好选择就好.我个人是比较 ...
- 分享两个BPM配置小技巧
1.小技巧 流程图修改后发布的话版本号会+1,修改次数多了之后可能会导致版本号很高,这个时候可以将流程导出,然后删除对应的流程包再导入,发布数据模型和流程图之后,版本清零 2.小技巧 有的同事入职后使 ...
随机推荐
- 如何去掉IE控件的垂直滚动条(使用QAxWidget加载IE控件)
如果使用MFC的CHtmlView或Qt的QAxWidget加载IE控件,载入html文件后都会自动带一个垂直滚动条,我们不想要这个滚动条,改怎么办呢?搜索了一下“隐藏IE控件滚动条”,发现在 htt ...
- 转:MySql的commit和rollback
从功能上划分,SQL 语言可以分为DDL,DML和DCL三大类.1. DDL(Data Definition Language) 数据定义语言,用于定义和管理 SQL 数据库中的所有对象的语言 ...
- 17.1 Replication Configuration
17.1 Replication Configuration 17.1.1 How to Set Up Replication 17.1.2 Replication Formats 17.1.3 Re ...
- 一步一步重写 CodeIgniter 框架 (7) —— Controller执行时将 Model获得的数据传入View中,实现MVC
1. 实现过程 1) 上一节讲述了 View 视图的加载过程,它是在 Loader 类中加载的,并通过 Include 语句进行包含.那么为了在 View 中传递变量,只需要在 include 语句所 ...
- 飞翔(LIS变形)
飞翔 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 鹰最骄傲的就是翱翔,但是鹰们互相都很嫉妒别的鹰比自己飞的快,更嫉妒其他的鹰比自己飞行的有技巧.于是,他们决定举办一场 ...
- 清华集训2014 day2 task1 简单回路
题目 如题. 算法 就是刚学习的插头DP. 从前往后和从后往前分别进行一次DP. 要点 合法的括号序列只有103个 如何合并两次dp的信息 一开始犯傻了,以为当且仅当两个轮廓线的状态相同才是合法的方案 ...
- 一步一步重写 CodeIgniter 框架 -- 原因和思路
CodeIgniter 是一个非常轻量级的 PHP 框架,说是轻量级,最新版的代码只有不到2M. 其最重要的特点就是 MVC 模式来编写代码,如果大家看过一些用 PHP 来编写网站的书籍或教程,无一例 ...
- Linux 软件源设置
版本号:1.0.0-beta 作者:石硕 更新:2014-04-30 15:51:40 ======================================================== ...
- 读TIJ -2 一切都是对象
<第2 章一切都是对象> 1.一切都是对象.不是Bruce Eckel说的,而是Alan Kay 总结的Smalltalk 五大基本特征的第一条. 从程序设计者或源码的角度,我觉得:&qu ...
- 在Windows下编译OpenSSL(VS2005和VC6)
需要说明的是请一定安装openssl-0.9.8a . openssl-1.0.0我没有编译成功. 如何在Windows下编译OpenSSL (Vs2005使用Vc8的cl编译器)1.安装Activ ...