C#中DataTable中的Compute方法使用收集

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

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

        DataTable dt = new DataTable();//嵌套的三元运算 牛叉到五体投地object obj = dt.Compute("iif(1000=5,1000,iif(100>100,4001,2000))", null);Response.Write(obj);System.Data.DataTable table = new DataTable();//计算常量,可以没有初始化列object test = table.Compute("1+1", "");Console.WriteLine(test);string a = "123";System.Double b = 123;decimal c = 123m;Console.WriteLine(Convert.ToDecimal(a));//test=2;
test = table.Compute("1+1", "false");Console.WriteLine(test);//test=2;常数计算和filter无关
test = table.Compute("abs(1)", "");Console.WriteLine(test);//test=null,不知道为这个什么没有报错,而且返回null,其他的数学函数都会抱错
test = table.Compute("2%2", "");Console.WriteLine(test);//test=0;//其他函数参考下面的计算列//初始化datataletable.Columns.Add("id", typeof(string));table.Columns.Add("value", typeof(int));for (int i = 1; i <= 10; i++){System.Data.DataRow dRow = table.NewRow();dRow["id"] = "id" + i.ToString();dRow["value"] = i;table.Rows.Add(dRow);}//test = table.Compute("value+1", "true");/**/////抛出异常,这里必须是聚合函数//*************************************支持的聚合函数**********************////求数量test = table.Compute("count(id)", "false");Console.WriteLine(test);//test=0;
test = table.Compute("count(id)", "true");Console.WriteLine(test);//test=10;//求和test = table.Compute("sum(value)", "");Console.WriteLine(test);//test=55;//test = table.Compute("sum(id)","");/**/////抛出异常,这里不能是string//平均test = table.Compute("avg(value)", "");Console.WriteLine(test);//test=5;//最小test = table.Compute("min(value)", "");Console.WriteLine(test);//test=1;//最大test = table.Compute("max(value)", "");Console.WriteLine(test);//test=10;//统计标准偏差test = table.Compute("StDev(value)", "");Console.WriteLine(test);//test=3.02765035409749//统计方差test = table.Compute("Var(value)", "");Console.WriteLine(test);//test=9.16666666666667//复杂计算test = table.Compute("max(value)/sum(value)", "");Console.WriteLine(test);//test=0.181818181818182/**//*******************************************计算列*************************/System.Data.DataColumn column = new DataColumn("exp1", typeof(float));table.Columns.Add(column);//简单计算column.Expression = "value*2";test = table.Select("id='id1'")[0]["exp1"];Console.WriteLine(test);//test=2;//字符串函数column.Expression = "len(id)";test = table.Select("id='id1'")[0]["exp1"];Console.WriteLine(test);//test=3;//字符串函数column.Expression = "len(' '+id+' ')";test = table.Select("id='id1'")[0]["exp1"];Console.WriteLine(test);//test=5;//字符串函数column.Expression = "len(trim(' '+id+' '))";test = table.Select("id='id1'")[0]["exp1"];Console.WriteLine(test);//test=3;//字符串函数column.Expression = "substring(id,3,len(id)-2)";test = table.Select("id='id1'")[0]["exp1"];Console.WriteLine(test);//test=1; //substring的起始字符位置为1不是0//类型转换column.Expression = "convert(substring(id,3,len(id)-2),'System.Int32')*1.6";test = table.Select("id='id1'")[0]["exp1"];Console.WriteLine(test);//test=1.6;//相当于sqlserver的isnullcolumn.Expression = "isnull(value,10)";test = table.Select("id='id1'")[0]["exp1"];Console.WriteLine(test);//test=1;//三元运算符,相当于sqlserver的case whencolumn.Expression = "iif(value>5,1000,2000)";test = table.Select("id='id1'")[0]["exp1"];Console.WriteLine(test);//test=2000;//like运算符column.Expression = "iif(id like '%1',1000,2000)";test = table.Select("id='id1'")[0]["exp1"];Console.WriteLine(test);//test=1000;//in运算符column.Expression = "iif(id not in('id1'),1000,2000)";test = table.Select("id='id1'")[0]["exp1"];Console.WriteLine(test);//test=2000;//嵌套的三元运算column.Expression = "iif(value>5,1000,iif(id like '%1',4000,2000))";test = table.Select("id='id1'")[0]["exp1"];Console.WriteLine(test);//test=4000;//客户端计算所占总数的百分比column.Expression = "value/sum(value)";test = table.Select("id='id1'")[0]["exp1"];Console.WriteLine(test);//test=0.01818182//客户端计算差值,比如nba常规赛的胜场差column.Expression = "max(value)-value";test = table.Select("id='id1'")[0]["exp1"];Console.WriteLine(test);//test=9//***********************父子表计算*************************************///初始化子表,父子表关系DataTable tableChild = new DataTable();tableChild.Columns.Add("id", typeof(string));tableChild.Columns.Add("value", typeof(int));System.Data.DataSet ds = new DataSet();ds.Tables.Add(tableChild);ds.Tables.Add(table);DataRelation relation = new DataRelation("relation", table.Columns["id"], tableChild.Columns["id"]);ds.Relations.Add(relation);for (int i = 1; i <= 10; i++){System.Data.DataRow dRow = tableChild.NewRow();dRow["id"] = "id1";dRow["value"] = i;tableChild.Rows.Add(dRow);}//计算子表记录数column.Expression = "count(child(relation).value)";test = table.Select("id='id1'")[0]["exp1"];Console.WriteLine(test);//test=10;//计算父子表的百分比column.Expression = "value/sum(child(relation).value)";test = table.Select("id='id1'")[0]["exp1"];Console.WriteLine(test);//test=0.01818182;//计算父子表的差值,比如父表为库存数量,子表为订购数量,计算得出需要补充的数量column.Expression = "iif(value-sum(child(relation).value)>0,0,value-sum(child(relation).value))";test = table.Select("id='id1'")[0]["exp1"];Console.WriteLine(test);//test=-54;//比较遗憾的是没有发现能够计算同比和环比的方法,而且计算列无法作为约束//结束,DataTable可以让你尽量发挥聪明才智来减少繁杂的sql语句并且减轻服务器计算符合

 

转载于:https://www.cnblogs.com/wolfocme110/p/4897737.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/256538.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Lazy延迟实例对象

懒对象&#xff0c;实现延迟实例对象。 转载于:https://www.cnblogs.com/yj2010/p/5798622.html

Shift键关闭大小写

同事说他的大写开了之后无法关闭&#xff0c;我检查了下&#xff0c;的确是&#xff0c;非常奇怪&#xff0c;然后我不小心按了下下面的Shift键&#xff0c;大写指示灯灭了&#xff0c;我立即明白是怎么回事&#xff0c;原来是文字和语言设置里的Key setting改了&#xff0c;如…

ANSYS——如何选择合适的单元类型

目录 1.该选杆单元(Link)还是梁单元(Beam)? 2.对于薄壁结构,是选实体单元还是壳单元?

深度学习之pytorch(一) 环境安装

快2周没更新博客了&#xff0c;别问为什么&#xff01;我才不会告诉你忙的飞起&#xff01;说心里话&#xff0c;个人更喜欢用tensorflow来做深度学习&#xff01; 一、环境配置 1.win10 64位系统&#xff1b; 2.anaconda3&#xff1b; 3.不管是CPU还是GPU具有&#xff08;…

hdu3068马拉车

其实马拉车还真是最好理解的算法&#xff08;感觉初中的时候好像讲过类似的&#xff0c;但是当时就没有认真听&#xff09; 没想到一个简单的优化能变成O(n)&#xff0c;感觉碉堡 不说了&#xff0c;马拉车裸题&#xff0c;我在写的时候只保留了id&#xff0c;没保留mx&#xf…

CAD——将图形移动到指定点的方法(此处以捕捉坐标系原点为例)

1、在CAD中画一个正方形&#xff0c;没有任何角点在坐标原点上 2、点击修改工具栏的“移动命令”&#xff0c;选择刚刚画好的图形&#xff0c;选择一个点为第一个基点&#xff1b; 3、先输入#号&#xff08;shift3&#xff09;,再输入0,0&#xff0c;用英文逗号隔开&#xff0c…

阅读推荐——深入浅出Mesos

深入浅出Mesos&#xff08;一&#xff09;&#xff1a;为软件定义数据中心而生的操作系统http://www.infoq.com/cn/articles/analyse-mesos-part-01 深入浅出Mesos&#xff08;二&#xff09;&#xff1a;Mesos的体系结构和工作流http://www.infoq.com/cn/articles/analyse-mes…

MySQL主从复制(二)

1<span style"font-family:sans-serif;">主从架构中&#xff1a;从node是不接受w操作的&#xff0c;否则可能会导致数据不一致。</span><br> 一、复制架构中应该注意的问题&#xff1a; 1.限制slave为只读模式 可以设置在启动参数中。 > show g…

深度学习之pytorch(二) 数据并行

又是好久没更新博客&#xff0c;最近琐事缠身&#xff0c;写文档写到吐。没时间学习新的知识&#xff0c;刚空闲下来立刻就学习之前忘得差不多得Pytorch。Pytorch和tensorflow差不多&#xff0c;具体得就不多啰嗦了&#xff0c;觉得还有疑问的童鞋可以自行去官网学习&#xff0…

JS 转换数字为大写

1 function toUpper(n) {2 n n;3 var unit 十百千万;4 var num 一二三四五六七八九 ;5 var array new Array();6 for (var in.length; i > 0; i--){7 var numIndex parseInt(n.charAt(i-1))-1;8 if(n…

ANSYS——ANSYS后处理操作技巧与各类问题良心大总结

目录 1.ANSYS后处理时如何按灰度输出云图&#xff1f; 2 将云图输出为JPG 3.怎么在计算结果实体云图中切面? 4.非线性计算过程中收敛曲线实时显示 5.运用命令流进行计算时,一个良好的习惯是: 6.应力图中左侧的文字中&#xff0c;SMX与SMN分别代表最大值和最小值 7.在非…

容器的综合应用:文本查询程序

需求 程序读取用户指定的任意文本文件&#xff0c;允许用户从该文件中查找单词。查询结果是该单词出现的次数&#xff0c;并列出每次出现所在行&#xff0c;如果某单词在同一行中多次出现&#xff0c;程序将只显示该行一次。行号按升序显示&#xff0c;即第 7 行应该在第 9 行之…

Anaconda 安装操作及遇到的坑

最近刚用Pytorch&#xff0c;编译开源代码的时候发现缺少n个package&#xff0c;原来是之前在Anaconda3 创建的虚拟环境各自是独立的&#xff0c;tensorflow下安装的不能在别的环境下使用&#xff0c;所以要重新安装。然而关键是国内各种屏蔽资源&#xff0c;无法FQ去直接下载安…

IE浏览器历史版本图标大全

上个月IE团队庆祝了IE的15周岁生日&#xff0c; 并晒了晒IE各个历史版本的图标&#xff1a; Internet Explorer 1.0 图标 Internet Explorer 2.0 图标 Internet Explorer 3.0 图标 Internet Explorer 4.0 图标 Internet Explorer 5.0 图标 Internet Explorer 6.0 图标 Internet…

7.Mybatis关联表查询(这里主要讲的是一对一和一对多的关联查询)

视频地址&#xff1a;http://edu.51cto.com/sd/be679 在Mybatis中的管理表查询这里主要介绍的是一对一和一对多的关联查询的resultMap的管理配置查询&#xff0c;当然你也可以用包装类来实现。不过这里不说&#xff0c;做关联查询的步骤可以简单的总结为以下的几步&#xff1a;…

ANSYS——查看某一截面的云图分布(也叫做切片图)

1.确定截面的位置 此处以图中红色处截面为例 2.将工作平面经过坐标变化移动到指定截面处(工作平面的XY平面与截面重合) 工作平面坐标系默认是与总体坐标系重合的,这里是先平移再进行旋转

深度学习之keras (一) 初探

之前一段时间里&#xff0c;学习过tensorflow和Pytorch也写了点心得&#xff0c;目前是因为项目原因用了一段时间Keras&#xff0c;觉得很不错啊&#xff0c;至少从入门来说对新手极度友好&#xff0c;由于keras是基于tensoflow的基础&#xff0c;相当于tensorflow的高级API吧&…

swift:高级运算符(位运算符、溢出运算符、优先级和结合性、运算符重载函数)...

swift&#xff1a;高级运算符 http://www.cocoachina.com/ios/20140612/8794.html 除了基本操作符中所讲的运算符&#xff0c;Swift还有许多复杂的高级运算符&#xff0c;包括了C语和Objective-C中的位运算符和移位运算。 不同于C语言中的数值计算&#xff0c;Swift的数值计算默…

收集、报告或保存系统活动信息:sar命令

2019独角兽企业重金招聘Python工程师标准>>> 索引 sar命令的使用常用方法 查看网络设备&#xff08;网卡&#xff09;的状态信息查看socket使用情况查看cpu使用情况(默认)查看内存和交换空间使用情况查看内存的统计信息查看tty设备的活动状态查看等待运行的进程数和…

【GOF23设计模式】原型模式

【GOF23设计模式】原型模式 来源&#xff1a;http://www.bjsxt.com/ 一、【GOF23设计模式】_原型模式、prototype、浅复制、深复制、Cloneable接口 浅复制 1 package com.test.prototype;2 3 import java.util.Date;4 5 /**6 * 浅复制7 */8 public class Sheep implements C…