DataTable dt = new DataTable();

//嵌套的三元运算(iif判断)object obj = dt.Compute("iif(1000=5,1000,iif(100>100,4001,2000))", null);Response.Write(obj);//计算常量,可以没有初始化列object test = table.Compute("1+1", "");Console.WriteLine(test);        //计算绝对值test = table.Compute("abs(1)", "");Console.WriteLine(test);

        //求余数test = table.Compute("2%2", "");Console.WriteLine(test);
//*************************************支持的聚合函数**********************////求数量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/firstjie333/p/4757673.html

C#中Datatable的Compute的用法(转载)相关推荐

  1. SQL Server 中 with tmp 临时表的用法

    SQL Server 中 with tmp 临时表的用法 ----------with临时表用法,有时候采用临时表比采用in的效率更高,避免了全表扫描. 实例中实现了查询普通题.大题.子题目的sql ...

  2. Oracle中INSTR和SUBSTR的用法

    2019独角兽企业重金招聘Python工程师标准>>> Oracle中INSTR和SUBSTR的用法 Oracle中INSTR的用法: INSTR方法的格式为 INSTR(源字符串, ...

  3. MapInfo中常用查询函数及用法

    MapInfo中常用查询函数及用法: 函数用途 语法 备注 图层中选点 Str$(obj)="point": Str(String)表示字符串:point表示点: 图层中选线 St ...

  4. 【Java学习笔记之二十九】Java中的equals和==的用法及区别

    Java中的"equals"和"=="的用法及区别 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String(&quo ...

  5. jquery中this与$(this)的用法区别.

    2019独角兽企业重金招聘Python工程师标准>>> jquery中this与$(this)的用法区别.先看以下代码: $("#textbox").hover( ...

  6. DataTable的Compute方法和Expression语法

    DataTable的Compute的功能可谓强大. public object Compute(string expression,string filter ); expression:要执行计算的 ...

  7. php中一个经典的!==的用法

    php中一个经典的!==的用法 1 <?php 2 $str = 'Every time you bleed for reaching greatness.'; 3 $cha = 'E'; 4 ...

  8. C# 中DataTable转成模型List

    C# 中DataTable转成模型List 引入using System.Reflection; 命名空间 使用注意实体类的属性名必须和DataTable的列名一致 使用: DBList<Sto ...

  9. Java中PreparedStatement和Statement的用法区别

    Java中PreparedStatement和Statement的用法区别 (2012-08-01 11:06:44) 转载▼ 标签: 杂谈   1. PreparedStatement接口继承Sta ...

最新文章

  1. Python 远程连接服务器用它就够了
  2. html5 文本框限制,html中input禁止输入(禁止获得焦点)多种方法及input限制数字和长度...
  3. 是时候拨开迷雾,看清5G当下的真面目了
  4. dropblock torch
  5. 抖音是用python写的吗_用 Python 实现抖音尬舞机
  6. DCMTK:压缩DICOM文件
  7. python以运行效率高著称吗_几个提升Python运行效率的方法之间的对比
  8. Linux下文件查找命令find笔记
  9. 日期多选插件Kalendae.js
  10. python处理文本
  11. inno setup相关 (二)
  12. js函数提示 vscode_VSCode + JSDoc 完美实现(almost)JavaScript代码提示
  13. ZMQ源码阅读 ---- zmq创建线程的过程
  14. Mac如何修复“无法卸载磁盘”错误
  15. Foobar2000播放软件的玄学
  16. 如何释放和管理 Mac 上的内存?
  17. 蓝桥杯试题 基础练习 圆的面积
  18. 单变量微积分笔记28——不定式和洛必达法则
  19. luogu1091合唱队形
  20. 莫名其妙把电脑机箱左边耳机孔弄出来声音

热门文章

  1. 构建高性能WEB站点笔记二
  2. Frameworks.Entity.Core 1
  3. 被App Store拒绝的N个原因
  4. DLL程序组件Microsoft Reporting Services Barcode Custom Report Item
  5. 需求工程之一:需求之道
  6. java分层窗格_java 简洁的分层实现
  7. mysql weblogic_weblogic连mysql的问题
  8. tcp之backlog参数
  9. (44)Xilinx ROM IP核配置(五)(第9天)
  10. java 两位小数 四舍五入_java里的四舍五入(保留两位小数,返回double类型)