C#中DataTable中的Compute方法使用收集
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#中DataTable中的Compute方法使用收集,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5933字,纯文字阅读大概需要9分钟。
内容图文
![C#中DataTable中的Compute方法使用收集](/upload/InfoBanner/zyjiaocheng/1081/da508776dd5e4fc3ba3d4d81341910f9.jpg)
1 DataTable dt = new DataTable(); 2//嵌套的三元运算 牛叉到五体投地 3object obj = dt.Compute("iif(1000=5,1000,iif(100>100,4001,2000))", null); 4 Response.Write(obj); 5 6 7 System.Data.DataTable table = new DataTable(); 8//计算常量,可以没有初始化列 9object test = table.Compute("1+1", ""); 10 Console.WriteLine(test); 11 12string a = "123"; 13 System.Double b = 123; 14decimal c = 123m; 15 Console.WriteLine(Convert.ToDecimal(a)); 16//test=2; 17 18 test = table.Compute("1+1", "false"); 19 Console.WriteLine(test); 20//test=2;常数计算和filter无关 21 22 test = table.Compute("abs(1)", ""); 23 Console.WriteLine(test); 24//test=null,不知道为这个什么没有报错,而且返回null,其他的数学函数都会抱错 25 26 test = table.Compute("2%2", ""); 27 Console.WriteLine(test); 28//test=0; 29//其他函数参考下面的计算列 30 31 32 33//初始化datatale 34 table.Columns.Add("id", typeof(string)); 35 table.Columns.Add("value", typeof(int)); 36for (int i = 1; i <= 10; i++) 37 { 38 System.Data.DataRow dRow = table.NewRow(); 39 dRow["id"] = "id" + i.ToString(); 40 dRow["value"] = i; 41 table.Rows.Add(dRow); 42 } 43 44 45 46//test = table.Compute("value+1", "true"); 47/**/ 48////抛出异常,这里必须是聚合函数 49 50 51 52//*************************************支持的聚合函数**********************// 53 54//求数量 55 test = table.Compute("count(id)", "false"); 56 Console.WriteLine(test); 57//test=0; 58 59 test = table.Compute("count(id)", "true"); 60 Console.WriteLine(test); 61//test=10; 62 63 64 65//求和 66 test = table.Compute("sum(value)", ""); 67 Console.WriteLine(test); 68//test=55; 69 70//test = table.Compute("sum(id)",""); 71/**/ 72////抛出异常,这里不能是string 73 74 75//平均 76 test = table.Compute("avg(value)", ""); 77 Console.WriteLine(test); 78//test=5; 79 80 81//最小 82 test = table.Compute("min(value)", ""); 83 Console.WriteLine(test); 84//test=1; 85 86//最大 87 test = table.Compute("max(value)", ""); 88 Console.WriteLine(test); 89//test=10; 90 91//统计标准偏差 92 test = table.Compute("StDev(value)", ""); 93 Console.WriteLine(test); 94//test=3.02765035409749 95 96//统计方差 97 test = table.Compute("Var(value)", ""); 98 Console.WriteLine(test); 99//test=9.16666666666667 100101102//复杂计算103 test = table.Compute("max(value)/sum(value)", ""); 104 Console.WriteLine(test); 105//test=0.181818181818182106107/**/108/*******************************************计算列*************************/109110 System.Data.DataColumn column = new DataColumn("exp1", typeof(float)); 111 table.Columns.Add(column); 112113114//简单计算115 column.Expression = "value*2"; 116 test = table.Select("id=‘id1‘")[0]["exp1"]; 117 Console.WriteLine(test); 118//test=2; 119120//字符串函数121 column.Expression = "len(id)"; 122 test = table.Select("id=‘id1‘")[0]["exp1"]; 123 Console.WriteLine(test); 124//test=3; 125126//字符串函数127 column.Expression = "len(‘ ‘+id+‘ ‘)"; 128 test = table.Select("id=‘id1‘")[0]["exp1"]; 129 Console.WriteLine(test); 130//test=5; 131132//字符串函数133 column.Expression = "len(trim(‘ ‘+id+‘ ‘))"; 134 test = table.Select("id=‘id1‘")[0]["exp1"]; 135 Console.WriteLine(test); 136//test=3; 137138//字符串函数139 column.Expression = "substring(id,3,len(id)-2)"; 140 test = table.Select("id=‘id1‘")[0]["exp1"]; 141 Console.WriteLine(test); 142//test=1; //substring的起始字符位置为1不是0 143144//类型转换145 column.Expression = "convert(substring(id,3,len(id)-2),‘System.Int32‘)*1.6"; 146 test = table.Select("id=‘id1‘")[0]["exp1"]; 147 Console.WriteLine(test); 148//test=1.6; 149150//相当于sqlserver的isnull151 column.Expression = "isnull(value,10)"; 152 test = table.Select("id=‘id1‘")[0]["exp1"]; 153 Console.WriteLine(test); 154//test=1; 155156//三元运算符,相当于sqlserver的case when157 column.Expression = "iif(value>5,1000,2000)"; 158 test = table.Select("id=‘id1‘")[0]["exp1"]; 159 Console.WriteLine(test); 160//test=2000; 161162//like运算符163 column.Expression = "iif(id like ‘%1‘,1000,2000)"; 164 test = table.Select("id=‘id1‘")[0]["exp1"]; 165 Console.WriteLine(test); 166//test=1000; 167168//in运算符169 column.Expression = "iif(id not in(‘id1‘),1000,2000)"; 170 test = table.Select("id=‘id1‘")[0]["exp1"]; 171 Console.WriteLine(test); 172//test=2000; 173174//嵌套的三元运算175 column.Expression = "iif(value>5,1000,iif(id like ‘%1‘,4000,2000))"; 176 test = table.Select("id=‘id1‘")[0]["exp1"]; 177 Console.WriteLine(test); 178//test=4000; 179180181//客户端计算所占总数的百分比182 column.Expression = "value/sum(value)"; 183 test = table.Select("id=‘id1‘")[0]["exp1"]; 184 Console.WriteLine(test); 185//test=0.01818182 186187188//客户端计算差值,比如nba常规赛的胜场差189 column.Expression = "max(value)-value"; 190 test = table.Select("id=‘id1‘")[0]["exp1"]; 191 Console.WriteLine(test); 192//test=9 193194195//***********************父子表计算*************************************/ 196197198//初始化子表,父子表关系199 DataTable tableChild = new DataTable(); 200201 tableChild.Columns.Add("id", typeof(string)); 202 tableChild.Columns.Add("value", typeof(int)); 203204 System.Data.DataSet ds = new DataSet(); 205 ds.Tables.Add(tableChild); 206 ds.Tables.Add(table); 207 DataRelation relation = new DataRelation("relation", table.Columns["id"], tableChild.Columns["id"]); 208 ds.Relations.Add(relation); 209210for (int i = 1; i <= 10; i++) 211 { 212 System.Data.DataRow dRow = tableChild.NewRow(); 213 dRow["id"] = "id1"; 214 dRow["value"] = i; 215 tableChild.Rows.Add(dRow); 216 } 217218219//计算子表记录数220 column.Expression = "count(child(relation).value)"; 221 test = table.Select("id=‘id1‘")[0]["exp1"]; 222 Console.WriteLine(test); 223//test=10; 224225226227//计算父子表的百分比228 column.Expression = "value/sum(child(relation).value)"; 229 test = table.Select("id=‘id1‘")[0]["exp1"]; 230 Console.WriteLine(test); 231//test=0.01818182; 232233234//计算父子表的差值,比如父表为库存数量,子表为订购数量,计算得出需要补充的数量235 column.Expression = "iif(value-sum(child(relation).value)>0,0,value-sum(child(relation).value))"; 236 test = table.Select("id=‘id1‘")[0]["exp1"]; 237 Console.WriteLine(test); 238//test=-54; 239240//比较遗憾的是没有发现能够计算同比和环比的方法,而且计算列无法作为约束 241//结束,DataTable可以让你尽量发挥聪明才智来减少繁杂的sql语句并且减轻服务器计算符合
原文:http://www.cnblogs.com/liang-ling/p/4910589.html
内容总结
以上是互联网集市为您收集整理的C#中DataTable中的Compute方法使用收集全部内容,希望文章能够帮你解决C#中DataTable中的Compute方法使用收集所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。