DataTable的Compute功能详解
生活随笔
收集整理的這篇文章主要介紹了
DataTable的Compute功能详解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在為篩選器創建表達式時,用單引號將字符串括起來:"LastName = 'Jones'"下面的字符是特殊字符,如下面所解釋的,如果它們用于列名稱中,就必須進行轉義:\n (newline)\t (tab)\r (carriage return)~()#\/=><+-*%&|^'"[]如果列名稱包含上面的字符之一,該名稱必須用中括號括起來。例如,若要在表達式中使用名為“Column#”的列,應寫成“[Column#]”:Total * [Column#]由于中括號是特殊字符,如果它是列名稱的組成部分,必須使用斜杠 ("\") 將中括號轉義。例如,名為“Column[]”的列應寫成:Total * [Column[\]](只有第二個中括號必須轉義。)用戶定義的值用戶定義的值可以用在將與列值進行比較的表達式內。字符串的值應括在單引號內。日期值應放在磅符號 (#) 內。對于數值,允許使用小數和科學記數法。例如:"FirstName = 'John'""Price <= 50.00""Birthdate < #1/31/82#"對于包含枚舉值的列,將值強制轉換為整數數據類型。例如:"EnumColumn = 5"運算符使用布爾值 AND、OR 和 NOT 運算符時允許串聯。可以使用括號來組合子句和強制優先級。AND 運算符優先于其他運算符。例如:(LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'在創建比較表達式時,允許使用下列運算符:<><=>=<>=INLIKE在表達式中還支持下列算術運算符:+(加)-(減)*(乘)/(除)%(模數)字符串運算符若要連接字符串,請使用 + 字符。DataSet 類的 CaseSensitive 屬性的值確定字符串比較是否區分大小寫。但是,可以用 DataTable 類的 CaseSensitive 屬性重寫該值。通配符在 LIKE 比較中,* 和 % 兩者可以互換地作為通配符。如果 LIKE 子句中的字符串包含 * 或 %,那么這些字符應用中括號([])對其進行轉義。如果子句中有中括號,那么中括號字符應用中括號對其進行轉義(例如 [[] 或 []])。在模式的開頭和結尾,或者在模式的結尾,或在模式的開頭,都允許使用通配符。例如:"ItemName LIKE '*product*'""ItemName LIKE '*product'""ItemName LIKE 'product*'"在字符串的中間不允許使用通配符。例如,不允許 'te*xt'。父/子關系引用通過在列名稱前面加 Parent,就可以在表達式中引用父表。例如,Parent.Price 引用父表的名為 Price 的列。通過在列名稱前面加一個 Child,就可以在表達式中引用子表中的列。但是,因為子關系可以返回多行,所以必須在聚合函數中包括對子列的引用。例如,Sum(Child.Price) 將返回子表中名為 Price 的列的總和。如果某個表有多個子表,則語法是:Child(RelationName)。例如,如果某個表有兩個子表,它們的名稱分別為 Customers 和 Orders,并且 DataRelation 對象被命名為 Customers2Orders,則引用將為:Avg(Child(Customers2Orders).Quantity)聚合支持下列聚合類型:Sum(求和)Avg(平均)Min(最小值)Max(最大值)Count(計數)StDev(統計標準偏差)Var(統計方差)。聚合通常沿著關系執行。通過使用上面列出的函數之一和上面“父/子關系引用”中詳述的子表列,來創建聚合表達式。例如:Avg(Child.Price)Avg(Child(Orders2Details).Price)聚合也可以在單個表上執行。例如,若要為名為“Price”的列中的數字創建匯總,就用:Sum(Price)一個小應用:讓DataTable模擬Excel的Formula功能。Excel中的Formula功能強大,如果能讓DataTable有類似的功能就好了。大部分事件DataTable只是用作數據載體,其實很少用它做計算。DataTable提供的函數Compute就提供了功能強大的計算功能。Compute函數的參數就兩個:Expression,和Filter。Expresstion是計算表達式,關于Expression的詳細內容請看這里“http://msdn2.microsoft.com/zh-cn/library/system.data.datacolumn.expression(VS.80).aspx”。而Filter則是條件過濾器,類似sql的Where條件。1: 這里詳細介紹的就是Expresstion。先看最簡單的用法,使用聚合函數。這個聚合函數就是報表或者Excel中常用的函數,比如Sum,Avg等等。對于數據列,Datatable可以方便的進行計算,比如DataTable.Cumpute(“Sum(列1)”,”列1>0”); 對于簡單的統計功能,這些函數就足夠用了。(其他提供的函數有min,max,count,求方差,標準偏差等等)。這個功能常用,倒也不奇怪。再看“自由表達式”計算。把數學計算表達式寫成字符串,然后直接投入Compute函數計算,就可以得到計算結果。這樣,動態生成的計算表達式就可以計算出來了。比方說要計算“列1×30+20+2”或者是純粹的數學計算。出了計算出具體的結果,Compute函數還能進行邏輯計算。比方說這個表達式就能返回false:Compute(“1=2”,”true”); 這個的用法可能想上邊的情形差不多,在自由組裝一些條件的時候可以得到結果。在Excel中,還經常用到的就是LogicTest功能了,可以指定一些邏輯表達式,比如這樣的:“IF(20>1000, 0, 1)”。而這個功能要是放到DataTable中該如何實現呢?也是用Compute,這樣寫就可以了:“IIF(20>1000, 0, 1)”。在DataTable里面如果實現“IF(C102=0,0,C105/C102*30)”就用上邊的這些技術點就可以了。2:至于第二個參數Filter,就是一個簡單的查詢條件。比如,”true”, “Id>4”, “Name like ’%nd’ and sex=’male’”.條件不可能很復雜,這些已經比較夠用了。以前用過的Marge什么的也不錯,還可以作內連接,在數據量小,需要簡單計算的情況下,這些功能很有用。當然,如果邏輯極其復雜,DT的這點功能就不夠了,還是得自己寫邏輯(即使要實現“IF(C102=0,0,C105/C102*30)”,也是要自己寫一點處理邏輯的,不過比較通用,寫一次就好了)。private void CalcColumns(){DataTable table = new DataTable ();// Create the first column.DataColumn priceColumn = new DataColumn();priceColumn.DataType = System.Type.GetType("System.Decimal");priceColumn.ColumnName = "price";priceColumn.DefaultValue = 50;// Create the second, calculated, column.DataColumn taxColumn = new DataColumn();taxColumn.DataType = System.Type.GetType("System.Decimal");taxColumn.ColumnName = "tax";taxColumn.Expression = "price * 0.0862";// Create third column.DataColumn totalColumn = new DataColumn();totalColumn.DataType = System.Type.GetType("System.Decimal");totalColumn.ColumnName = "total";totalColumn.Expression = "price + tax";// Add columns to DataTable.table.Columns.Add(priceColumn);table.Columns.Add(taxColumn);table.Columns.Add(totalColumn);DataRow row = table.NewRow();table.Rows.Add(row);DataView view = new DataView(table);dataGrid1.DataSource = view;}
轉載于:https://www.cnblogs.com/top5/archive/2011/10/28/2228111.html
總結
以上是生活随笔為你收集整理的DataTable的Compute功能详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: javabean和EJB的区别
- 下一篇: qq闺密个性签名一对