加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

datatable computer 的使用(转载)

发布时间:2020-12-12 15:44:06 所属栏目:MsSql教程 来源:网络整理
导读:(原文)http://www.cnblogs.com/chinafine/archive/2008/08/23/1274700.html 这个是我的问题解决的源代码 Imports ?System.Linq Imports ?System.Data Public ? Class ?Form1 ???? Private ? Sub ?Form1_Load( ByVal ?sender? As ?System. Object ,? ByVal ?e
(原文)http://www.cnblogs.com/chinafine/archive/2008/08/23/1274700.html
这个是我的问题解决的源代码
  1. Imports?System.Linq
  2. Imports?System.Data
  3. Public?Class?Form1
  4. ????Private?Sub?Form1_Load(ByVal?sender?As?System.Object,?ByVal?e?As?System.EventArgs)?Handles?MyBase.Load
  5. ????????Dim?sql?=?New?SqlHelper.DataBaseHelper
  6. ????????Dim?ds?=?sql.ExecQuery("SELECT?P_DPRES_TYPE?AS?处方类型,?P_DPRES_ITEM_CODE?AS?项目代码,"?&?_
  7. ???????????????????????????????"?P_DPRES_ITEM_NAME?AS?项目名称,?P_DPRES_SPEC?AS?规格,"?&?_
  8. ???????????????????????????????"?P_DPRES_DOSAGE?AS?计量,?P_DPRES_UNIT?AS?单位,?P_DPRES_USAGE?AS?用法?"?&?_
  9. ???????????????????????????????"?FROM?ORD_PACKAGE_PRES_DTL?")
  10. ????????Dim?colum?As?New?DataColumn
  11. ????????colum.ColumnName?=?"处方类型2"
  12. ????????colum.Caption?=?colum.ColumnName
  13. ????????colum.Expression?=?"iif(处方类型=1,'西成药',(iif(处方类型=2,'中草药',iif(处方类型=3,'项目',iif(处方类型=4,'材料','其他')))))"
  14. ????????ds.Tables(0).Columns.Add(colum)
  15. ????????OutlookGrid1.Dock?=?DockStyle.Fill
  16. ????????Me.OutlookGrid1.BindData(ds,?ds.Tables(0).TableName)
  17. ????????Dim?out?=?New?OutlookStyleControls.OutlookgGridDefaultGroup
  18. ????????Me.OutlookGrid1.GroupTemplate?=?out
  19. ????????Me.OutlookGrid1.GroupTemplate.Column?=?OutlookGrid1.Columns("处方类型2")
  20. ????????Me.OutlookGrid1.Sort(New?OutlookGridControl.OutlookGrid.DataRowComparer(Me.OutlookGrid1.GroupTemplate.Column.Index,?0))
  21. ????End?Sub
  22. End?Class

以下是显示结果

http://p.blog.csdn.net/images/p_blog_csdn_net/maxjove/EntryImages/20081221/EUK%BJ(%R1DO2KJC_PG1XTN.jpg
?

以下是作者的源代码

  1. using?System;
  2. using?System.Collections.Generic;
  3. using?System.Linq;
  4. using?System.Text;
  5. using?System.Data;
  6. namespace?Console11
  7. {
  8. ????class?Program
  9. ????{
  10. ????????static?void?Main(string[]?args)
  11. ????????{
  12. ????????????System.Data.DataTable?table?=?new?DataTable();
  13. ????????????//计算常量,可以没有初始化列
  14. ????????????object?test?=?table.Compute("1+1",?"");
  15. ????????????Console.WriteLine(test);
  16. ????????????string?a?=?"123";
  17. ????????????System.Double?b=123;
  18. ????????????decimal?c=123m;
  19. ????????????Console.WriteLine((float)a);
  20. ????????????//test=2;
  21. ????????????test?=?table.Compute("1+1",?"false");
  22. ????????????Console.WriteLine(test);
  23. ????????????//test=2;常数计算和filter无关
  24. ????????????test?=?table.Compute("abs(1)",?"");
  25. ????????????Console.WriteLine(test);
  26. ????????????//test=null,不知道为这个什么没有报错,而且返回null,其他的数学函数都会抱错
  27. ????????????test?=?table.Compute("2%2",?"");
  28. ????????????Console.WriteLine(test);
  29. ????????????//test=0;
  30. ????????????//其他函数参考下面的计算列
  31. ????????????//初始化datatale
  32. ????????????table.Columns.Add("id",?typeof(string));
  33. ????????????table.Columns.Add("value",?typeof(int));
  34. ????????????for?(int?i?=?1;?i?<=?10;?i++)
  35. ????????????{
  36. ????????????????System.Data.DataRow?dRow?=?table.NewRow();
  37. ????????????????dRow["id"]?=?"id"?+?i.ToString();
  38. ????????????????dRow["value"]?=?i;
  39. ????????????????table.Rows.Add(dRow);
  40. ????????????}
  41. ????????????//test?=?table.Compute("value+1",?"true");
  42. ????????????/**/
  43. ????????????////抛出异常,这里必须是聚合函数
  44. ????????????//*************************************支持的聚合函数**********************//
  45. ????????????//求数量
  46. ????????????test?=?table.Compute("count(id)",?"false");
  47. ????????????Console.WriteLine(test);
  48. ????????????//test=0;
  49. ????????????test?=?table.Compute("count(id)",?"true");
  50. ????????????Console.WriteLine(test);
  51. ????????????//test=10;
  52. ????????????//求和
  53. ????????????test?=?table.Compute("sum(value)",?"");
  54. ????????????Console.WriteLine(test);
  55. ????????????//test=55;
  56. ????????????//test?=?table.Compute("sum(id)","");
  57. ????????????/**/
  58. ????????????////抛出异常,这里不能是string
  59. ????????????//平均
  60. ????????????test?=?table.Compute("avg(value)",?"");
  61. ????????????Console.WriteLine(test);
  62. ????????????//test=5;
  63. ????????????//最小
  64. ????????????test?=?table.Compute("min(value)",?"");
  65. ????????????Console.WriteLine(test);
  66. ????????????//test=1;
  67. ????????????//最大
  68. ????????????test?=?table.Compute("max(value)",?"");
  69. ????????????Console.WriteLine(test);
  70. ????????????//test=10;
  71. ????????????//统计标准偏差
  72. ????????????test?=?table.Compute("StDev(value)",?"");
  73. ????????????Console.WriteLine(test);
  74. ????????????//test=3.02765035409749
  75. ????????????//统计方差
  76. ????????????test?=?table.Compute("Var(value)",?"");
  77. ????????????Console.WriteLine(test);
  78. ????????????//test=9.16666666666667
  79. ????????????//复杂计算
  80. ????????????test?=?table.Compute("max(value)/sum(value)",?"");
  81. ????????????Console.WriteLine(test);
  82. ????????????//test=0.181818181818182
  83. ????????????/**/
  84. ????????????/*******************************************计算列*************************/
  85. ????????????System.Data.DataColumn?column?=?new?DataColumn("exp1",?typeof(float));
  86. ????????????table.Columns.Add(column);
  87. ????????????//简单计算
  88. ????????????column.Expression?=?"value*2";
  89. ????????????test?=?table.Select("id='id1'")[0]["exp1"];
  90. ????????????Console.WriteLine(test);
  91. ????????????//test=2;
  92. ????????????//字符串函数
  93. ????????????column.Expression?=?"len(id)";
  94. ????????????test?=?table.Select("id='id1'")[0]["exp1"];
  95. ????????????Console.WriteLine(test);
  96. ????????????//test=3;
  97. ????????????//字符串函数
  98. ????????????column.Expression?=?"len('?'+id+'?')";
  99. ????????????test?=?table.Select("id='id1'")[0]["exp1"];
  100. ????????????Console.WriteLine(test);
  101. ????????????//test=5;
  102. ????????????//字符串函数
  103. ????????????column.Expression?=?"len(trim('?'+id+'?'))";
  104. ????????????test?=?table.Select("id='id1'")[0]["exp1"];
  105. ????????????Console.WriteLine(test);
  106. ????????????//test=3;
  107. ????????????//字符串函数
  108. ????????????column.Expression?=?"substring(id,3,len(id)-2)";
  109. ????????????test?=?table.Select("id='id1'")[0]["exp1"];
  110. ????????????Console.WriteLine(test);
  111. ????????????//test=1;?//substring的起始字符位置为1不是0
  112. ????????????//类型转换
  113. ????????????column.Expression?=?"convert(substring(id,len(id)-2),'System.Int32')*1.6";
  114. ????????????test?=?table.Select("id='id1'")[0]["exp1"];
  115. ????????????Console.WriteLine(test);
  116. ????????????//test=1.6;
  117. ????????????//相当于sqlserver的isnull
  118. ????????????column.Expression?=?"isnull(value,10)";
  119. ????????????test?=?table.Select("id='id1'")[0]["exp1"];
  120. ????????????Console.WriteLine(test);
  121. ????????????//test=1;
  122. ????????????//三元运算符,相当于sqlserver的case?when
  123. ????????????column.Expression?=?"iif(value>5,1000,2000)";
  124. ????????????test?=?table.Select("id='id1'")[0]["exp1"];
  125. ????????????Console.WriteLine(test);
  126. ????????????//test=2000;
  127. ????????????//like运算符
  128. ????????????column.Expression?=?"iif(id?like?'%1',2000)";
  129. ????????????test?=?table.Select("id='id1'")[0]["exp1"];
  130. ????????????Console.WriteLine(test);
  131. ????????????//test=1000;
  132. ????????????//in运算符
  133. ????????????column.Expression?=?"iif(id?not?in('id1'),2000)";
  134. ????????????test?=?table.Select("id='id1'")[0]["exp1"];
  135. ????????????Console.WriteLine(test);
  136. ????????????//test=2000;
  137. ????????????//嵌套的三元运算
  138. ????????????column.Expression?=?"iif(value>5,iif(id?like?'%1',4000,2000))";
  139. ????????????test?=?table.Select("id='id1'")[0]["exp1"];
  140. ????????????Console.WriteLine(test);
  141. ????????????//test=4000;
  142. ????????????//客户端计算所占总数的百分比
  143. ????????????column.Expression?=?"value/sum(value)";
  144. ????????????test?=?table.Select("id='id1'")[0]["exp1"];
  145. ????????????Console.WriteLine(test);
  146. ????????????//test=0.01818182
  147. ????????????//客户端计算差值,比如nba常规赛的胜场差
  148. ????????????column.Expression?=?"max(value)-value";
  149. ????????????test?=?table.Select("id='id1'")[0]["exp1"];
  150. ????????????Console.WriteLine(test);
  151. ????????????//test=9
  152. ????????????//***********************父子表计算*************************************/
  153. ????????????//初始化子表,父子表关系
  154. ????????????DataTable?tableChild?=?new?DataTable();
  155. ????????????tableChild.Columns.Add("id",?typeof(string));
  156. ????????????tableChild.Columns.Add("value",?typeof(int));
  157. ????????????System.Data.DataSet?ds?=?new?DataSet();
  158. ????????????ds.Tables.Add(tableChild);
  159. ????????????ds.Tables.Add(table);
  160. ????????????DataRelation?relation?=?new?DataRelation("relation",?table.Columns["id"],?tableChild.Columns["id"]);
  161. ????????????ds.Relations.Add(relation);
  162. ????????????for?(int?i?=?1;?i?<=?10;?i++)
  163. ????????????{
  164. ????????????????System.Data.DataRow?dRow?=?tableChild.NewRow();
  165. ????????????????dRow["id"]?=?"id1";
  166. ????????????????dRow["value"]?=?i;
  167. ????????????????tableChild.Rows.Add(dRow);
  168. ????????????}
  169. ????????????//计算子表记录数
  170. ????????????column.Expression?=?"count(child(relation).value)";
  171. ????????????test?=?table.Select("id='id1'")[0]["exp1"];
  172. ????????????Console.WriteLine(test);
  173. ????????????//test=10;
  174. ????????????//计算父子表的百分比
  175. ????????????column.Expression?=?"value/sum(child(relation).value)";
  176. ????????????test?=?table.Select("id='id1'")[0]["exp1"];
  177. ????????????Console.WriteLine(test);
  178. ????????????//test=0.01818182;
  179. ????????????//计算父子表的差值,比如父表为库存数量,子表为订购数量,计算得出需要补充的数量
  180. ????????????column.Expression?=?"iif(value-sum(child(relation).value)>0,value-sum(child(relation).value))";
  181. ????????????test?=?table.Select("id='id1'")[0]["exp1"];
  182. ????????????Console.WriteLine(test);
  183. ????????????//test=-54;
  184. ????????????//比较遗憾的是没有发现能够计算同比和环比的方法,而且计算列无法作为约束
  185. ????????????//************结束,DataTable可以让你尽量发挥聪明才智来减少繁杂的sql语句并且减轻服务器计算符合
  186. ????????}
  187. ????}
  188. }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读