服務(wù)熱線
153 8323 9821
問(wèn):
DataRow[] drArray;
string strExpr;
string strSort;
strExpr = "Subject like % "+tbCondition.Text+ "% ";//這里應(yīng)該如何寫(xiě)?查了不少貼子都沒(méi)有類(lèi)似這樣的寫(xiě)法。主要是like
strSort = "ID DESC ";
drArray = dt.Select(strExpr,strSort,DataViewRowState.CurrentRows);//dt是DataTable的實(shí)例,這行執(zhí)行之后,dt原來(lái)的數(shù)據(jù)是否已經(jīng)改變。
回答:
Expression 屬性的一個(gè)用途是創(chuàng)建計(jì)算出的列。例如,若要計(jì)算稅值,就要將單價(jià)乘以給定地區(qū)的稅率。由于各地稅率不同,不可能將單一的稅率放在列中;于是便用 Expression 屬性來(lái)計(jì)算這個(gè)值,如下面的 Visual Basic 代碼所示:
DataSet1.Tables( "Products ").Columns( "tax ").Expression = "UnitPrice * 0.086 "
第二個(gè)用途是創(chuàng)建聚合列。類(lèi)似于計(jì)算出的值,聚合基于 DataTable 中的整個(gè)行集執(zhí)行操作。一個(gè)簡(jiǎn)單的示例是對(duì)返回到集中的行數(shù)進(jìn)行計(jì)數(shù),這也就是您可能用來(lái)對(duì)某個(gè)特定銷(xiāo)售人員完成的交易次數(shù)進(jìn)行計(jì)數(shù)的方法,如下面的 Visual Basic 代碼所示:
DataSet1.Tables( "Orders ").Columns( "OrderCount ").Expression = "Count(OrderID) "
表達(dá)式語(yǔ)法
在創(chuàng)建表達(dá)式時(shí),使用 ColumnName 屬性來(lái)引用列。例如,如果一個(gè)列的 ColumnName 是“UnitPrice”(單價(jià)),而另一個(gè)是“Quantity”(數(shù)量),則表達(dá)式將是:
"UnitPrice * Quantity "
在為篩選器創(chuàng)建表達(dá)式時(shí),將字符串放到單引號(hào)中:
"LastName = Jones "
下面的字符是特殊字符,如下面所解釋的,如果它們用于列名稱中,就必須進(jìn)行轉(zhuǎn)義:
\n (newline)
\t (tab)
\r (carriage return)
~
(
)
#
\
/
=
>
<
+
-
*
%
&
|
^
"
[
]
如果列名稱包含上面的字符之一,該名稱必須用中括號(hào)括起來(lái)。例如,若要在表達(dá)式中使用名為“Column#”的列,應(yīng)寫(xiě)成“[Column#]”:
Total * [Column#]
由于中括號(hào)是特殊字符,如果它是列名稱的組成部分,必須使用斜杠 ( "\ ") 將中括號(hào)轉(zhuǎn)義。例如,名為“Column[]”的列應(yīng)寫(xiě)成:
Total * [Column[\]]
(只有第二個(gè)中括號(hào)必須轉(zhuǎn)義。)
用戶定義的值
用戶定義的值可以用在將與列值進(jìn)行比較的表達(dá)式內(nèi)。字符串值應(yīng)放在單引號(hào)內(nèi)。日期值應(yīng)放在磅符號(hào) (#) 內(nèi)。對(duì)于數(shù)值,允許使用小數(shù)和科學(xué)記數(shù)法。例如:
"FirstName = John "
"Price <= 50.00 "
"Birthdate < #1/31/82# "
對(duì)于包含枚舉值的列,將值強(qiáng)制轉(zhuǎn)換為整數(shù)數(shù)據(jù)類(lèi)型。例如:
"EnumColumn = 5 "
運(yùn)算符
使用布爾值 AND、OR 和 NOT 運(yùn)算符時(shí)允許串聯(lián)。可以使用括號(hào)來(lái)組合子句和強(qiáng)制優(yōu)先級(jí)。AND 運(yùn)算符優(yōu)先于其他運(yùn)算符。例如:
(LastName = Smith OR LastName = Jones ) AND FirstName = John
在創(chuàng)建比較表達(dá)式時(shí),允許使用下列運(yùn)算符:
<
>
<=
> =
<>
=
IN
LIKE
在表達(dá)式中還支持下列算術(shù)運(yùn)算符:
+(加)
-(減)
*(乘)
/(除)
%(模數(shù))
字符串運(yùn)算符
若要連接字符串,請(qǐng)使用 + 字符。字符串比較是否區(qū)分大小寫(xiě)由 DataSet 類(lèi)的 CaseSensitive 屬性的值來(lái)確定。但是,可以用 DataTable 類(lèi)的 CaseSensitive 屬性重寫(xiě)此值。
通配符
在 LIKE 比較中,* 和 % 兩者可以互換地作為通配符。如果 LIKE 子句中的字符串包含 * 或 %,那么這些字符應(yīng)用中括號(hào)([])對(duì)其進(jìn)行轉(zhuǎn)義。如果子句中有中括號(hào),那么中括號(hào)字符應(yīng)用中括號(hào)對(duì)其進(jìn)行轉(zhuǎn)義(例如 [[] 或 []])。在模式的開(kāi)頭和結(jié)尾,或者在模式的結(jié)尾,或在模式的開(kāi)頭允許使用通配符。例如:
"ItemName LIKE *product* "
"ItemName LIKE *product "
"ItemName LIKE product* "
在字符串的中間不允許使用通配符。例如,不允許 te*xt 。
父/子關(guān)系引用
通過(guò)在列名稱前面加 Parent,就可以在表達(dá)式中引用父表。例如,Parent.Price 引用父表的名為 Price 的列。
通過(guò)在列名稱前面加一個(gè) Child,就可以在表達(dá)式中引用子表中的列。但是,因?yàn)樽雨P(guān)系可以返回多行,所以必須在聚合函數(shù)中包括對(duì)子列的引用。例如,Sum(Child.Price) 將返回子表中名為 Price 的列的總和。
如果某個(gè)表有多個(gè)子表,則語(yǔ)法是:Child(RelationName)。例如,如果某個(gè)表有兩個(gè)子表,它們的名稱分別為 Customers 和 Orders,則 DataRelation 對(duì)象被命名為 Customers2Orders,引用將為:
Avg(Child(Customers2Orders).Quantity)
聚合
支持下列聚合類(lèi)型:
Sum(求和)
Avg(平均)
Min(最小值)
Max(最大值)
Count(計(jì)數(shù))
StDev(統(tǒng)計(jì)標(biāo)準(zhǔn)偏差)
Var(統(tǒng)計(jì)方差)。
聚合通常沿著關(guān)系執(zhí)行。通過(guò)使用上面列出的函數(shù)之一和上面“父/子關(guān)系引用”中詳述的子表列,來(lái)創(chuàng)建聚合表達(dá)式。例如:
Avg(Child.Price)
Avg(Child(Orders2Details).Price)
聚合也可以在單個(gè)表上執(zhí)行。例如,若要為名為“Price”的列中的數(shù)字創(chuàng)建匯總,就用:
Sum(Price)
注意 如果使用一個(gè)表來(lái)創(chuàng)建聚合,將沒(méi)有組合功能。相反,所有行都在列中顯示相同的值。
如果表沒(méi)有行,聚合函數(shù)將返回空引用(Visual Basic 中為 Nothing)。
數(shù)據(jù)類(lèi)型總是可以通過(guò)檢查列的 DataType 屬性來(lái)確定。還可以使用 Convert 函數(shù)來(lái)轉(zhuǎn)換數(shù)據(jù)類(lèi)型,如下所示。
FUNCTIONS
還支持下列函數(shù):
CONVERT
描述 將給定表達(dá)式轉(zhuǎn)換為指定的 .NET Framework 類(lèi)型。
語(yǔ)法 Convert(expression, type)
參數(shù) expression — 要轉(zhuǎn)換的表達(dá)式。
type — 值將轉(zhuǎn)換成的 .NET Framework 類(lèi)型。
例如:myDataColumn.Expression= "Convert(total, System.Int32 ) "
所有轉(zhuǎn)換都是有效的,只有下列情況例外:Boolean 只能與 Byte、SByte、Int16、Int32、Int64、UInt16、UInt32、UInt64、String 和它本身相互轉(zhuǎn)換。Char 只能與 Int32、UInt32、String 和它本身相互轉(zhuǎn)換。DateTime 只能與 String 和它本身相互轉(zhuǎn)換。TimeSpan 只能與 String 和它本身相互轉(zhuǎn)換。
LEN
描述 獲取字符串的長(zhǎng)度
語(yǔ)法 LEN(expression)
參數(shù) expression — 要計(jì)算的字符串。
例如:myDataColumn.Express