靈魂-放水

          為學日益,為道日損。

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            296 Posts :: 10 Stories :: 274 Comments :: 0 Trackbacks
          ??在實際編程工程中,常常遇到這樣的情況:DataTable并不是數(shù)據(jù)庫中的,或者DataTable尚未寫到數(shù)據(jù)庫,或者從數(shù)據(jù)庫中讀出的DataTable已經(jīng)在本地被改動,又沒有寫回數(shù)據(jù)庫(可能還要作其他改動),在這些情況下,要查詢DataTable中的數(shù)據(jù),強大的SQL語言就派不上用場了。
          ???
          ??有些.NET程序員采取在數(shù)據(jù)庫中建立臨時表等方法來解決這類查詢問題。而我覺得這種方法不可行,其實只要用.NET類庫中提供的DataView類的強大功能(主要是用它的RowFilter屬性),就能方便地解決這類查詢問題。下面就舉一個具體的例子,來說明如何不用SQL語句,用DataView的RowFilter屬性來查詢。?
          ????
          ??用DataView的RowFilter屬性完全能達到SQL語句SELECT語句所實現(xiàn)的功能
          ???
          ??RowFilter中的查詢語句與SQL語句中SELECT語句的語法和作用都極為相似,以下是摘自MSDN中關(guān)于RowFilter查詢語句的語法說明:
          ???
          ??/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
          ???
          ??用戶定義的值可以用在將與列值進行比較的表達式內(nèi)。字符串值應(yīng)放在單引號內(nèi)。日期值應(yīng)放在磅符號 (#) 內(nèi)。對于數(shù)值,允許使用小數(shù)和科學記數(shù)法。例如:?
          ????
          ??"FirstName = 'John'"??
          ???
          ??"Price <= 50.00"????
          ???
          ??"Birthdate < #1/31/82#"????
          ???
          ??對于包含枚舉值的列,將值強制轉(zhuǎn)換為整數(shù)數(shù)據(jù)類型。例如:?
          ???
          ??"EnumColumn = 5"????
          ???
          ??運算符????
          ???
          ??使用布爾值 AND、OR 和 NOT 運算符時允許串聯(lián)。可以使用括號來組合子句和強制優(yōu)先級。AND 運算符優(yōu)先于其他運算符。例如:?
          ???
          ??(LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'????
          ???
          ??在創(chuàng)建比較表達式時,允許使用下列運算符:?
          ???
          ??<?
          ???
          ??>???
          ???
          ??<=????
          ???
          ??>=???
          ???
          ??<>?
          ????
          ??=?
          ?????
          ??IN?
          ?????
          ??LIKE?
          ??????
          ??在表達式中還支持下列算術(shù)運算符:?
          ??????
          ??+(加)?
          ?????
          ??-(減)?
          ??????
          ??*(乘)?
          ??????
          ??/(除)?
          ??????
          ??%(模數(shù))?
          ??????
          ??字符串運算符?
          ??????
          ??若要連接字符串,請使用 + 字符。字符串比較是否區(qū)分大小寫由 DataSet 類的 CaseSensitive 屬性的值來確定。但是,可以用 DataTable 類的 CaseSensitive 屬性重寫此值。?
          ?????
          ??通配符?
          ??????
          ??在 LIKE 比較中,* 和 % 兩者可以互換地作為通配符。如果 LIKE 子句中的字符串包含 * 或 %,那么這些字符應(yīng)用中括號([])對其進行轉(zhuǎn)義。如果子句中有中括號,那么中括號字符應(yīng)用中括號對其進行轉(zhuǎn)義(例如 [[] 或 []])。在模式的開頭和結(jié)尾,或者在模式的結(jié)尾,或在模式的開頭允許使用通配符。例如:?
          ??????
          ??"ItemName LIKE '*product*'"?
          ??????
          ??"ItemName LIKE '*product'"?
          ??????
          ??"ItemName LIKE 'product*'"?
          ??????
          ??在字符串的中間不允許使用通配符。例如,不允許 'te*xt'。?
          ?????
          ??父/子關(guān)系引用?
          ??????
          ??通過在列名稱前面加 Parent,就可以在表達式中引用父表。例如,Parent.Price 引用父表的名為 Price 的列。?
          ?????
          ??通過在列名稱前面加一個 Child,就可以在表達式中引用子表中的列。但是,因為子關(guān)系可以返回多行,所以必須在聚合函數(shù)中包括對子列的引用。例如,Sum(Child.Price) 將返回子表中名為 Price 的列的總和。?
          ??????
          ??如果某個表有多個子表,則語法是:Child(RelationName)。例如,如果某個表有兩個子表,它們的名稱分別為 Customers 和 Orders,則 DataRelation 對象被命名為 Customers2Orders,引用將為:?
          ??????
          ??Avg(Child(Customers2Orders).Quantity)?
          ??????
          ??聚合?
          ??????
          ??支持下列聚合類型:?
          ??????
          ??Sum(求和)?
          ??????
          ??Avg(平均)?
          ??????
          ??Min(最小值)?
          ??????
          ??Max(最大值)?
          ??????
          ??Count(計數(shù))?
          ??????
          ??StDev(統(tǒng)計標準偏差)?
          ??????
          ??Var(統(tǒng)計方差)。?
          ?????
          ??聚合通常沿著關(guān)系執(zhí)行。通過使用上面列出的函數(shù)之一和上面“父/子關(guān)系引用”中詳述的子表列,來創(chuàng)建聚合表達式。例如:?
          ?????
          ??Avg(Child.Price)?
          ??????
          ??Avg(Child(Orders2Details).Price)?
          ??????
          ??聚合也可以在單個表上執(zhí)行。例如,若要為名為“Price”的列中的數(shù)字創(chuàng)建匯總,就用:?
          ??????
          ??Sum(Price)?

          posted on 2007-01-08 16:15 放水老倌 閱讀(509) 評論(0)  編輯  收藏 所屬分類: 數(shù)據(jù)庫
          主站蜘蛛池模板: 湟源县| 溧阳市| 栖霞市| 当涂县| 吴江市| 和静县| 上高县| 沙雅县| 正蓝旗| 镇原县| 河北省| 获嘉县| 泸定县| 天津市| 孝义市| 瑞安市| 南乐县| 安陆市| 沾化县| 北流市| 东源县| 县级市| 黔西县| 石泉县| 攀枝花市| 郯城县| 竹溪县| 阳曲县| 甘南县| 石阡县| 东海县| 潮安县| 元氏县| 桂林市| 奎屯市| 宝清县| 诸城市| 梁河县| 沙雅县| 碌曲县| 洪洞县|