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 ...
随机推荐
- LightOJ - 1038 Race to 1 Again 递推+期望
题目大意:给出一个数,要求你按一定的规则将这个数变成1 规则例如以下,如果该数为D,要求你在[1,D]之间选出D的因子.用D除上这个因子,然后继续按该规则运算.直到该数变成1 问变成1的期望步数是多少 ...
- Android-加载大图避免OOM
高效加载大图片 我们在编写Android程序的时候经常要用到许多图片,不同图片总是会有不同的形状.不同的大小,但在大多数情况下,这些图片都会大于我们程序所需要的大小.比如说系统图片库里展示的图片大都是 ...
- js thousand separator and change td content
js thousand seprator and change TD content // integer function addCommas(n){ })/; return String(n).r ...
- 3、Go Exit
package main import ( "fmt" "os") func main() { //当使用`os.Exit`的时候defer操作不会被运行 所以 ...
- MNIST手写数字数据集
下载python源代码之后,使用: import input_data mnist = input_data.read_data_sets('MNIST_data/',one_hot=True) 下载 ...
- redis 扩展 windows
下载地址:http://windows.php.net/downloads/pecl/releases/redis/
- 【noip2016】蚯蚓(单调性+队列)
题目贼长 大意是你有n个线段,每一秒你要拿出来最长的一个线段切成两段长度为[p*u](向下取整)和u-[p*u]两段(其中u是线段长,p是一个大于0小于1的实数)没被切的线段长度加q(0<q&l ...
- vue+element的表格分页和前端搜索
1.前端后台管理会存在很多表格,表格数据过多就需要分页;2.前端交互每次搜索如果都请求服务器会加大服务器的压力,所以在数据量不是很大的情况下可以一次性将数据返回,前端做检索3.下面贴上一个demo & ...
- MySQL auttoReconnect
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from ...
- Spring-statemachine fork一个region后不能进入join状态的问题
Spring-statemachine版本:当前最新的1.2.3.RELEASE版本 发现fork多个Region时,子状态全部完成后能够进入join状态.但是如果fork一个Region时Regio ...