System.Data.DataTable计算功能详解

using System;
using System.ComponentModel;
using System.Data;
using System.Windows.Forms;
namespace WindowsApplication1
...{
  public partial class Form1 : Form
  ...{
    public Form1()
    ...{
      InitializeComponent();
    }
    private void button1_Click(object sender, EventArgs e)
    ...{
      //System.Data.DataTable计算功能详解,转载请保留以下信息
      //测试环境   vs2005,c#
      //作者:     jinjazz
      //作者blog:   http://blog.csdn.net/jinjazz/
      System.Data.DataTable table = new DataTable();
      //计算常量,可以没有初始化列
      object test = table.Compute("1+1", "");
      Console.WriteLine(test);
      //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;
      //其他函数参考下面的计算列
  
      //初始化datatale
      table.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的isnull
      column.Expression = "isnull(value,10)";
      test = table.Select("id='id1'")[0]["exp1"];
      Console.WriteLine(test);
      //test=1;
      //三元运算符,相当于sqlserver的case when
      column.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语句并且减轻服务器计算符合^&^
    }
  }
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索table
, datatable
, test
, system
, datatable计算列
, Compute
, WriteLine
system函数详解
c语言system函数详解、akka actorsystem详解、systemctl命令详解、systemctl status详解、systemctl 详解,以便于您获取更多的相关知识。

时间: 2024-11-02 09:08:06

System.Data.DataTable计算功能详解的相关文章

Oracle闪回(flashback)功能详解 闪回数据归档(Flashback Data Archive)

Oracle闪回(flashback)功能详解  闪回数据归档(Flashback Data Archive)                     > > > > > > > >           > > >                               >                                           >                                 

MySQL的用户密码过期功能详解

MySQL的用户密码过期功能详解 作者:chszs,未经博主允许不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs 先说明两个术语. Payment Card Industry,即支付卡行业,PCI行业表示借记卡.信用卡.预付卡.电子钱包.ATM和POS卡及相关的业务. PCI DSS,即PCI数据安全标准(Payment Card Industry Data Security Standard)是由PCI安全标准委员会制定,旨在使国际上采用一致的数

java(jsp)整合discuz同步登录功能详解

 jsp整合discuz同步登录功能详解,Uenter是Comsenz旗下各个产品之间信息直接传递的一个桥梁,通过UCenter站长可以无缝整合Comsenz系列产品,Center拥有机制完善的接口,经过简单修改便可以挂接其它任何平台的第三方的网络应用程序 最近做了一个资源库系统的项目,老师说可以搭建开源论坛替代自己开发社交模块,正好在开源中国上看到了一个利用discuz的UCenter功能实现同步登录的开源项目(https://code.google.com/p/discuz-ucenter-

Bkh1.1.5建站系统功能概述与功能详解_常用工具

Bkh1.1.5功能详解 目录 一.    Bkh1.1.5建站系统功能概述.... 3 二.    注册用户功能详解.... 4 1.     注册用户功能概述... 4 2.     怎样注册成为一个站点的用户... 4 3.     登陆站点找到管理菜单... 5 4.     用户设置功能... 6 5.     我的文件库功能... 9 6.     我自己的站点... 9 7.     我加入的站点... 12 8.     我拥有的角色... 13 9.     我的博客... 1

Android6.0 屏幕固定功能详解_Android

可能大家看到这个标题不知道是什么东西,我先说明下,android6.0在设置->安全->屏幕固定开启后,然后再长按home键出现最近的几个Activity可以选择一个图钉按钮就开启了屏幕固定功能. 屏幕固定开启后,屏幕只能固定在设定的Task上的Activity切换. 一.设置固定屏幕 我们先来看SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java的代码,这段代码就是长按home键出现几个Activity,然后按

Android6.0 屏幕固定功能详解

可能大家看到这个标题不知道是什么东西,我先说明下,android6.0在设置->安全->屏幕固定开启后,然后再长按home键出现最近的几个Activity可以选择一个图钉按钮就开启了屏幕固定功能. 屏幕固定开启后,屏幕只能固定在设定的Task上的Activity切换. 一.设置固定屏幕 我们先来看SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java的代码,这段代码就是长按home键出现几个Activity,然后按

ASP中利用OWC控件实现图表功能详解

控件|图表|详解 在ASP中利用OWC(Office Web Components)控件可轻松实现各种图表功能,如饼图,簇状柱型图,折线图等. 在下面的代码中我详细的给出了饼图,簇状柱型图,折线图的使用方法.OWC的更多功能,属性可参加MSOWCVBA.chm帮助文件(在office 2000的文件夹下大家自己找). testOWC.asp <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <

10个实用的电脑运行命令功能详解

  10个实用的电脑运行命令功能详解 要使用命令操作,最基本的是先需要如何打开运行操作框,主要有2种方法: 1.最快捷方法:使用 Windows + R 组合快捷键,快速呼出命令操作窗口. 2.常用方法:点击桌面左下角的"开始"然后找到并点击打开→"运行". 使用方法,打开命令操作窗口后,只要输入输入命令,然后按回车键或点击"确定"即可允许命名,实现各种功能. 了解如何打开命名操作框之后,接下来就来分享一下实用的命令吧,使用命令可以实现很多功能,

Photoshop液化功能详解与瘦身实作

从基础认识到实作范例,一篇文章就让你学会好玩的液化工具,一起来练习吧 液化功能详解 向前弯曲工具:手指的图示有点像是根据你游标的移动(按住)扭曲,像是咖啡拉花.按住shift在画面上拖曳可以拉出直线. 重建工具:不管经过多少扭曲的效果都能用这个工具矫正回原状. 瞬时针扭转工具:按住可瞬时针扭转像素,按住ALT可以逆时针旋转. 缩拢工具:按住可以将像素往内缩.通常轻点一两下就好啦~我的妈阿!你是谁?? 膨胀工具:和缩拢工具相反,按住可以让像素往外扩张.根本是鱼眼相机哈哈哈. 分类: PS入门教程