DataTable中Compute计算函数
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 = "";
System.Double b = ;
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;
//其他函数参考下面的计算列 //初始化datatale
table.Columns.Add("id", typeof(string));
table.Columns.Add("value", typeof(int));
for (int i = ; i <= ; 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'")[]["exp1"];
Console.WriteLine(test);
//test=2; //字符串函数
column.Expression = "len(id)";
test = table.Select("id='id1'")[]["exp1"];
Console.WriteLine(test);
//test=3; //字符串函数
column.Expression = "len(' '+id+' ')";
test = table.Select("id='id1'")[]["exp1"];
Console.WriteLine(test);
//test=5; //字符串函数
column.Expression = "len(trim(' '+id+' '))";
test = table.Select("id='id1'")[]["exp1"];
Console.WriteLine(test);
//test=3; //字符串函数
column.Expression = "substring(id,3,len(id)-2)";
test = table.Select("id='id1'")[]["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'")[]["exp1"];
Console.WriteLine(test);
//test=1.6; //相当于sqlserver的isnull
column.Expression = "isnull(value,10)";
test = table.Select("id='id1'")[]["exp1"];
Console.WriteLine(test);
//test=1; //三元运算符,相当于sqlserver的case when
column.Expression = "iif(value>5,1000,2000)";
test = table.Select("id='id1'")[]["exp1"];
Console.WriteLine(test);
//test=2000; //like运算符
column.Expression = "iif(id like '%1',1000,2000)";
test = table.Select("id='id1'")[]["exp1"];
Console.WriteLine(test);
//test=1000; //in运算符
column.Expression = "iif(id not in('id1'),1000,2000)";
test = table.Select("id='id1'")[]["exp1"];
Console.WriteLine(test);
//test=2000; //嵌套的三元运算
column.Expression = "iif(value>5,1000,iif(id like '%1',4000,2000))";
test = table.Select("id='id1'")[]["exp1"];
Console.WriteLine(test);
//test=4000; //客户端计算所占总数的百分比
column.Expression = "value/sum(value)";
test = table.Select("id='id1'")[]["exp1"];
Console.WriteLine(test);
//test=0.01818182 //客户端计算差值,比如nba常规赛的胜场差
column.Expression = "max(value)-value";
test = table.Select("id='id1'")[]["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 = ; i <= ; 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'")[]["exp1"];
Console.WriteLine(test);
//test=10; //计算父子表的百分比
column.Expression = "value/sum(child(relation).value)";
test = table.Select("id='id1'")[]["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'")[]["exp1"];
Console.WriteLine(test);
//test=-54; //比较遗憾的是没有发现能够计算同比和环比的方法,而且计算列无法作为约束
//结束,DataTable可以让你尽量发挥聪明才智来减少繁杂的sql语句并且减轻服务器计算符合
DataTable中Compute计算函数的更多相关文章
- mysql中时间计算函数SQL DATE_SUB()用法
本文为博主原创,未经允许不得转载: 在写sql的时候,经常要在sql中传值时间,对时间进行计算并过滤.之前都是将时间在后台计算好,直接传值给sql, 今天发现,有一个更方便的sql函数,可以简化很多代 ...
- C#中DataTable中的Compute方法使用收集
原文: C#中DataTable中的Compute方法使用收集 Compute函数的参数就两个:Expression,和Filter. Expresstion是计算表达式,关于Expression的详 ...
- 转载 C#中DataTable中的Compute方法使用收集
原文: C#中DataTable中的Compute方法使用收集 Compute函数的参数就两个:Expression,和Filter. Expresstion是计算表达式,关于Expression的详 ...
- C语言中几个常用数学计算函数ceil(), floor(), round()的用法
最近在实现算法的过程中,遇到了使用几个数学计算函数,感觉挺有意思,就记下来 方便以后使用. ceil(x)返回不小于x的最小整数值(然后转换为double型). floor(x)返回不大于x的最大整数 ...
- sql server2005版本中,len函数计算了字符串末尾的空格
sql server2005版本中,len函数计算了字符串末尾的空格的长度,以下是测试脚本: print @@version declare @v varchar(max) set @v = 'hp, ...
- 【转载】Sqlserver中使用Round函数对计算结果四舍五入
在实际应用的计算中,很多时候我们需要对最后计算结果四舍五入,其实在Sqlserver中也有对应的四舍五入函数,就是Round函数,Round函数的格式为Round(column_name,decima ...
- 转:DataTable的Compute方法的应用
转自:http://www.cnblogs.com/hfliyi/archive/2013/01/08/2851944.html 项目中遇到计算平均值.标准偏差.平均值+标准偏差.平均值+2倍标准偏差 ...
- DataTable中执行DataTable.Select("条件"),
我们在使用Sql ******这些数据库时,可以轻松的通过Sum.Aver.Count等统计出相关结果,那么,在已经把数据检索出来的DataSet(DataTable)中呢?特别是通过Web Serv ...
- c# 基于DataTable的Compute方法的扩展
DataTable.Compute(String, String) 方法 定义 命名空间:System.Data 程序集:System.Data.dll, netstandard.dll, Syste ...
随机推荐
- 【codeforces 417D】Cunning Gena
[题目链接]:http://codeforces.com/problemset/problem/417/D [题意] 有n个人共同完成m个任务; 每个人有可以完成的任务集(不一定所有任务都能完成); ...
- nested exception is java.lang.NoClassDefFoundError: org/codehaus/jettison/json/JSONObject异常的解决办法
解决办法:你可以尝试添加一个jar包,因为我加入了一个jar包后错误问题成功解决. 将所需要的jettison-1.2.jar包复制到lib文件夹里面,重启项目,问题搞定.
- 最多包含2/k个不同字符的最长串
看这里的解答: http://www.cnblogs.com/grandyang/p/5351347.html 通用解决了2和k的问题.
- [Angular] Short Imports with TypeScript Path Mapping
The idea is change from: import {CoreModule} from '../core/core.module'; to: import {CoreModule} fro ...
- HDU 2222 Keywords Search(AC自己主动机模板题)
题意:给出一个字符串和若干个模板,求出在文本串中出现的模板个数. 思路:由于有可能有反复的模板,trie树权值记录每一个模板出现的次数就可以. #include<cstdio> #incl ...
- django 笔记12 session
第一步写好函数,然后生成数据库session表 python manage.py makemigrations python manage.py migrate session原理: .Session ...
- tomcat:Could not publish to the server. java.lang.IndexOutOfBoundsException
1.将工程加入到tomcat,报上述错误 2. run--maven build 报jar包错误: invalid LOC header (bad signature) 3.根据提示找到上述jar包, ...
- VS 代码打包工具
源代码下载地址 https://github.com/loresoft/msbuildtasks
- mysql语句判断一天操作记录的个数
话说有一文章表article,存储文章的添加文章的时间是add_time字段,该字段为int(5)类型的,现需要查询今天添加的文章总数并且按照时间从大到小排序,则查询语句如下: 1 select ...
- 解决夸dll返回dynamic无法访问
public static class DynamicFactory { //创建线程安全(对象不会再同一时刻被多个线程访问)的字典对象 private static ConcurrentDictio ...