C#中Datatable的Compute的用法(转载)

        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的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语句并且减轻服务器计算符合

本文转载至:

时间: 2024-08-30 07:05:24

C#中Datatable的Compute的用法(转载)的相关文章

mysql中count,GROUP BY的用法(转载)

计算你拥有动物的总数目与“在pet表中有多少行?”是同样的问题,因为每个宠物有一个记录.COUNT(*)函数计算行数,所以计算动物数目的查询应为: mysql> SELECT COUNT(*) FROM pet;+----------+| COUNT(*) |+----------+|        9 |+----------+在前面,你检索了拥有宠物的人的名字.如果你想要知道每个主人有多少宠物,你可以使用COUNT( )函数: mysql> SELECT owner, COUNT(*) F

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

原文: 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 DataT

GNU C中的零长度数组(转载)

GNU C中的零长度数组(转载) 原文链接:http://blog.csdn.net/ssdsafsdsd/article/details/8234736 在标准C和C++中,长度为0的数组是被禁止使用的.不过在GNU C中,存在一个非常奇怪的用法,那就是长度为0的数组,比如Array[0];很多人可能觉得不可思议,长度为0的数组是没有什么意义的,不过在这儿,它表示的完全是另外的一层意思,这个特性是不可移植的,所以,如果你致力于编写可移植,或者是稍稍需要跨平台的代码,这些Trick最好还是收起来

Java中PreparedStatement和Statement的用法区别

Java中PreparedStatement和Statement的用法区别 (2012-08-01 11:06:44) 转载▼ 标签: 杂谈   1. PreparedStatement接口继承Statement, PreparedStatement 实例包含已编译的 SQL 语句,所以其执行速度要快于 Statement 对象. 2.作为 Statement 的子类,PreparedStatement 继承了 Statement 的所有功能.三种方法 execute. executeQuery

C# DataTable的詳細用法 - hcw_peter的专栏 - 博客频道 - CSDN

C# DataTable的詳細用法 - hcw_peter的专栏 - 博客频道 - CSDN.NET 在项目中经常用到DataTable,如果DataTable使用得当,不仅能使程序简洁实用,而且能够提高性能,达到事半功倍的效果,现对DataTable的使用技巧进行一下总结. 一.DataTable简介 (1)构造函数           DataTable()   不带参数初始化DataTable 类的新实例.           DataTable(string tableName)  用指

elasticsearch的基本用法(转载)

最大的特点:  1. 数据库的 database, 就是  index  2. 数据库的 table,  就是 tag  3. 不要使用browser, 使用curl来进行客户端操作.  否则会出现 java heap ooxx... curl:  -X 后面跟 RESTful :  GET, POST ...  -d 后面跟数据. (d = data to send) 1. create: 指定 ID 来建立新记录. (貌似PUT, POST都可以)  $ curl -XPOST localh

AndroidDrawable那些不为人知的高效用法(转载)

AndroidDrawable那些不为人知的高效用法 转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/43752383,本文出自:[张鸿洋的博客] 1.概述 Drawable在我们平时的开发中,基本都会用到,而且给大家非常的有用.那么什么是Drawable呢?能够在canvas上绘制的一个玩意,而且相比于View,并不需要去考虑measure.layout,仅仅只要去考虑如何draw(canavs).当然了,对于Drawable

c++内存中字节对齐问题详解[转载]

一.什么是字节对齐,为什么要对齐?     现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐.     对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同.一些平台对某些特定类型的数据只能从某些特定地址开始存取.比如有些架构的CPU在访问 一个没有进行对齐的变量的时候会发生错误,那么在

C#中DataTable删除行的方法分析

本文实例讲述了C#中DataTable删除行的方法,分享给大家供大家参考之用.具体实现方法如下: 自己的删除例子(drTemp是表,gvSummary是dev 的gridview.单击右键点击grid删除): 1.dtTemp.Rows.RemoveAt(gvSummary.FocusedRowHandle); 2.dtTemp.Rows[gvSummary.FocusedRowHandle].Delete();  dtTemp.AcceptChanges(); 在C#中,如果要删除DataTa