当前位置 : 主页 > 网络编程 > 其它编程 >

C#DataTable.Compute()用法

来源:互联网 收集:自由互联 发布时间:2023-07-02
DataTable.Compute()用法2010-04-0711:28一、DataTable.Compute()方法說明如下作用计算用来传递筛选条件的当前行上的给 DataTable.Compute()用法 2010-04-07 11:28 一、DataTable.Compute()方法說明如下作用     
DataTable.Compute()用法2010-04-0711:28一、DataTable.Compute()方法說明如下作用计算用来传递筛选条件的当前行上的给 DataTable.Compute()用法 2010-04-07 11:28 一、DataTable.Compute()方法說明如下作用          计算用来传递筛选条件的当前行上的给定表达式。 格式為          Object Compute (string expression,string filter)参数          expression要计算的表达式。 expression 参数需要聚合函数。          filter要限制在表达式中进行计算的行的筛选器。 如“Menu_ID5” //表示Menu_ID為5的行返回值          為Object型为计算结果。Expression說明          Expression 属性的一个用途是创建计算出的列。 第二个用途是创建聚合列。类似于计算出的值聚合基于 DataTable 中的整个行集执行操作。表达式语法          在创建表达式时使用 ColumnName属性(表中列的名稱)来引用表中的列。用法//得到menu1表中order列中最大值            object s dsSet.Tables["menu1"].Compute("Max(order)", ""); 二、創建Expression說明2.1、在为筛选器创建表达式时用单引号将字符串括起来          "LastName Jones"          2.1.1特殊字符處理              下面的字符是特殊字符如下面所解释的如果它们用于列名称中就必须进行转义。

"n (newline)

"t (tab)

"r (carriage return)

~

(

)

#

"

/

>

<

-

*

%

"

[

]

          2.1.2 轉義方法為              如果列名称包含上面的字符之一该名称必须用中括号括起来。例如若要在表达式中使用名为“Column#”的列应写成“[Column#]”               Total * [Column#]           由于中括号是特殊字符如果它是列名称的组成部分必须使用斜杠 (""") 将中括号转义。例如名为“Column[]”的列应写成               Total * [Column["]] 只有第二个中括号必须转义。 2.2、用户定义的值處理        2.2.1义的值可以用在将与列值进行比较的表达式内。字符串的值应括在单引号内。日期值应放在磅符号 (#) 内。对于数值允许使用小数和科学记数法。例如              "FirstName John"             "Price < 50.00"             "Birthdate <#1/31/82#"         2.2.2含枚举值的列将值强制转换为整数数据类型。例如              "EnumColumn 5" 2.3、运算符         2.3.1 使用布尔值 AND、OR 和 NOT 运算符时允许串联。可以使用括号来组合子句和强制优先级。AND 运算符优先于其他运算符。例如               (LastName Smith OR LastName Jones) AND FirstName John          2.3.2 在创建比较表达式时允许使用下列运算符

<

>

<

>

IN

LIKE

         2.3.3 在表达式中还支持下列算术运算符

-减

*乘

/除

%模数

2.4、字符串运算符處理         若要连接字符串请使用 字符。DataSet 类的 CaseSensitive 属性的值确定字符串比较是否区分大小写。但是可以用 DataTable 类的 CaseSensitive 属性重写该值。2.5、通配符          在 LIKE 比较中* 和 % 两者可以互换地作为通配符。如果 LIKE 子句中的字符串包含 * 或 %那么这些字符应用中括号[]对其进行转义。如果子句中有中括号那么中括号字符应用中括号对其进行转义例如 [[] 或 []]。在模式的开头和结尾或者在模式的结尾或在模式的开头都允许使用通配符。例如              "ItemName LIKE *product*"             "ItemName LIKE *product"             "ItemName LIKE product*"          在字符串的中间不允许使用通配符。例如不允许 te*xt。2.6、父/子关系引用          通过在列名称前面加 Parent就可以在表达式中引用父表。例如Parent.Price 引用父表的名为 Price 的列。         通过在列名称前面加一个 Child就可以在表达式中引用子表中的列。但是因为子关系可以返回多行所以必须在聚合函数中包括对子列的引用。例如Sum(Child.Price) 将返回子表中名为 Price 的列的总和。         如果某个表有多个子表则语法是Child(RelationName)。 例如         如果某个表有两个子表它们的名称分别为 Customers 和 Orders并且 DataRelation 对象被命名为 Customers2Orders则引用将为 Avg(Child(Customers2Orders).Quantity) 2.7、聚合          2.7.1 支持聚合类型如下

Sum求和

Avg平均

Min最小值

Max最大值

Count计数

StDev统计标准偏差

Var统计方差

          聚合通常沿着关系执行。通过使用上面列出的函数之一和上面“父/子关系引用”中详述的子表列来创建聚合表达式。例如            Avg(Child.Price)             Avg(Child(Orders2Details).Price)          聚合也可以在单个表上执行。例如若要为名为“Price”的列中的数字创建汇总就用             Sum(Price)          如果表没有行聚合函数将返回 空引用在 Visual Basic 中为 Nothing。         数据类型总是可以通过检查列的 DataType 属性来确定。还可以使用 Convert 函数来转换数据类型如下面这一部分所示。2.、支持下列函数         2.8.1 CONVERT          说明             将特定表达式转换为指定的 .NET Framework 类型。          语法 Convert(expression, type)          参数 expression — 要转换的表达式。         type — 值将转换成的 .NET Framework 类型。           例如             myDataColumn.Expression"Convert(total, System.Int32)"           所有转换都是有效的只有下列情况例外Boolean 只能与 Byte、SByte、Int16、Int32、Int64、UInt16、UInt32、UInt64、String 和它本身相互转换。Char 只能与 Int32、UInt32、String 和它本身相互转换。DateTime 只能与 String 和它本身相互转换。TimeSpan 只能与 String 和它本身相互转换。        2.8.2 LEN             说明 获取字符串的长度             语法 LEN(expression)             参数 expression — 要计算的字符串。             例如myDataColumn.Expression"Len(ItemName)"         2.8.3 ISNULL             说明 检查表达式并返回已检查的表达式或返回替换值。             语法 ISNULL(expression, replacementvalue)             参数 expression — 要检查的表达式。            replacementvalue — 如果表达式为 空引用在 Visual Basic 中为 Nothing则返回 replacementvalue。             例如myDataColumn.Expression"IsNull(price, -1)"         2.8.5 IIF             说明 根据逻辑表达式的结果获取两个值之一。             语法 IIF(expr, truepart, falsepart)             参数 expr — 要计算的表达式。            truepart — 表达式为真时返回的值。            falsepart — 表达式为假时返回的值。              例如myDataColumn.Expression "IIF(total>1000, expensive, dear)         2.8.6 TRIM             说明 移除所有前导的和后缀的空格字符如 "r、"n、"t、             语法 TRIM(expression)             参数 expression — 要剪裁的表达式。         2.8.7 SUBSTRING             说明 获取从字符串中的指定点开始具有指定长度的子字符串。             语法 SUBSTRING(expression, start, length)             参数 expression — 子字符串的源字符串。            start — 指定子字符串开始位置的整数。            length — 指定子字符串长度的整数。              例如myDataColumn.Expression "SUBSTRING(phone, 7, 8)" DataTable.Compute方法使用实例 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; namespace Console11 { class Program { static void Main(string[] args) { System.Data.DataTable table new DataTable(); //计算常量可以没有初始化列 object test table.Compute("11", ""); Console.WriteLine(test); string a "123"; System.Double b123; decimal c123m; Console.WriteLine((float)a); //test2; test table.Compute("11", "false"); Console.WriteLine(test); //test2;常数计算和filter无关 test table.Compute("abs(1)", ""); Console.WriteLine(test); //testnull不知道为这个什么没有报错而且返回null,其他的数学函数都会抱错 test table.Compute("2%2", ""); Console.WriteLine(test); //test0; //其他函数参考下面的计算列 //初始化datatale table.Columns.Add("id", typeof(string)); table.Columns.Add("value", typeof(int)); for (int i 1; i 5,1000,2000)"; test table.Select("idid1")[0]["exp1"]; Console.WriteLine(test); //test2000; //like运算符 column.Expression "iif(id like %1,1000,2000)"; test table.Select("idid1")[0]["exp1"]; Console.WriteLine(test); //test1000; //in运算符 column.Expression "iif(id not in(id1),1000,2000)"; test table.Select("idid1")[0]["exp1"]; Console.WriteLine(test); //test2000; //嵌套的三元运算 column.Expression "iif(value>5,1000,iif(id like %1,4000,2000))"; test table.Select("idid1")[0]["exp1"]; Console.WriteLine(test); //test4000; //客户端计算所占总数的百分比 column.Expression "value/sum(value)"; test table.Select("idid1")[0]["exp1"]; Console.WriteLine(test); //test0.01818182 //客户端计算差值,比如nba常规赛的胜场差 column.Expression "max(value)-value"; test table.Select("idid1")[0]["exp1"]; Console.WriteLine(test); //test9 //***********************父子表计算*************************************/ //初始化子表,父子表关系 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 0,0,value-sum(child(relation).value))"; test table.Select("idid1")[0]["exp1"]; Console.WriteLine(test); //test-54; //比较遗憾的是没有发现能够计算同比和环比的方法而且计算列无法作为约束 //************结束DataTable可以让你尽量发挥聪明才智来减少繁杂的sql语句并且减轻服务器计算符合^&^ } } }

转:https://www.cnblogs.com/LuoEast/p/9585775.html

上一篇:列表,表格和表单的使用
下一篇:没有了
网友评论