本文提供此 API 參考文件的補充備註。
Expression 屬性的一個用途是建立計算欄位。 例如,若要計算稅值,單價會乘以特定區域的稅率。 由於稅率因地區而異,因此不可能在數據行中放置單一稅率:而是使用 Expression 屬性來計算值,如下列程式代碼所示:
DataSet1.Tables("Products").Columns("tax").Expression = "UnitPrice * 0.086"
第二個用法是建立匯總數據行。 與計算值類似,匯總會根據 DataTable 中的完整列集來執行作業。 簡單的範例是計算集合中傳回的數據列數目。 這是您將用來計算特定銷售人員完成之交易數目的方法,如下列程式代碼所示:
DataSet1.Tables("Orders").Columns("OrderCount").Expression = "Count(OrderID)"
表達式語法
當您建立表示式時,請使用 ColumnName 屬性來參考數據行。 例如,如果 ColumnName 一欄的內容是 「UnitPrice」,而另一個欄位的內容是 「Quantity」,則表達式為:
"UnitPrice * Quantity"
備註
如果表達式中使用數據行,則表示表達式相依於該數據行。 如果重新命名或移除相依數據行,則不會引發任何例外。 當存取目前中斷的表達式欄位時,將會拋出例外狀況。
當您建立篩選的表示式時,請以單引弧括住字串:
"LastName = 'Jones'"
如果數據行名稱包含任何非英數位元、以數字開頭,或符合下列任何保留字,則需要特殊處理,如下列段落所述。
And
Between
Child
False
In
Is
Like
Not
Null
Or
Parent
True
如果欄位名稱符合上述其中一個條件,則必須以方括號或重音符號引號括住。 例如,若要在表達式中使用名為 “Column#” 的數據行,您可以撰寫 “[Column#]” 或 “'Column#'”:
Total * [Column#]
如果數據行名稱以方括弧括住,則必須使用反斜杠 (“\”) 字元前面加上它們,以逸出其中的任何 ']' 和 '\' 字元(但不是任何其他字元)。 如果欄位名稱以反引號括住,則它不得包含任何反引號。 例如,將寫入名為 「Column[]\」 的資料行:
Total * [Column[\]\\]
或
總計 * `Column[]\`
用戶定義值
用戶定義值可用於與數據行值比較的表達式內。 字串值應該以單引號括住(而且字串值中的每個單引號字元都必須在字元前加上一個單引號來轉義)。 日期值應以磅號 (#) 或單引號 (') 括住,以數據提供者為基礎。 數值允許小數和科學表示法。 例如:
"FirstName = 'John'"
"Price <= 50.00"
"Birthdate < #1/31/2006#"
對於包含列舉值的數據行,請將值轉換成整數數據類型。 例如:
"EnumColumn = 5"
剖析字面值表達式
所有文字表達式必須以不受文化特性影響的地區設定來表示。 當 DataSet 剖析和轉換文字表達式時,它一律會使用不變文化,而不是當前的文化設定。
當值周圍有單引號時,會識別出字串字面值。 例如: 'John' 。
Boolean 常值是 true 和 false,它們不會在表達式中加上引號。
Integer 常值 [+-]?[0-9]+ 會被視為 System.Int32、System.Int64 或 System.Double。
System.Double 視數位的大小而定,可能會失去精確度。 例如,如果字面量中的數字是2147483650,DataSet 會先嘗試將數字剖析為 Int32。 這不會成功,因為數位太大。 在此情況下 DataSet,會將數字解析為 Int64,這將會成功。 如果常值大於 Int64 DataSet 的最大值,請使用 Double剖析常值。
使用科學表示法的實際常值,例如 4.42372E-30,會使用 System.Double剖析。
具有小數點但沒有科學表示法的實數常量會被視為System.Decimal。 如果數字超過 所 System.Decimal支援的最大值或最小值,則會將其剖析為 System.Double。 例如:
- 142526.144524 會轉換成
Decimal。 - 345262.78036719560925667 被視為
Double。
運營商
允許使用布爾值 AND、OR 和 NOT 運算符進行串連。 您可以使用括號來群組子句並強制執行優先順序。 AND 運算子的優先順序高於其他運算元。 例如:
(LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'
當您建立比較表示式時,允許下列運算子:
- <
- >
- <=
- >=
- =
INLIKE
運算式中也支援下列算術運算子:
- + (加法)
- - (減法)
- * (乘法)
- / (除)
- % (模數)
字串運算子
若要串連字串串,請使用 + 字元。
CaseSensitive 類別的 DataSet 屬性值決定字串比較是否區分大小寫。 不過,您可以使用 CaseSensitive 類別的 DataTable 屬性覆寫該值。
通配符
*和%字元可以互相替換,用作LIKE比較中的通配符。 如果 LIKE 子句中的字串包含 * 或 %,這些字元應該以方括號 ([]) 括住。 如果括弧位於 子句中,則每個括號字元都應該以括弧括住(例如 [[] 或 []])。 在模式開頭和結尾,或僅在模式開頭,或僅在模式結尾允許使用通配符。 例如:
"ItemName LIKE '*product*'""ItemName LIKE '*product'""ItemName LIKE 'product*'"
字串中間不允許通配符。 例如,不允許 'te*xt'。
父系/子系關聯參考
透過在欄名稱前面加上 Parent,可以在表達式中引用父資料表。 例如, Parent.Price 參考名為 Price的父數據表數據行。
當子系有多個父資料列時,請使用 Parent(RelationName).ColumnName。 例如, Parent(RelationName).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)
備註
如果您使用單一資料表來建立彙總,將無法使用分組功能。 相反地,所有數據列都會在數據行中顯示相同的值。
如果資料表沒有資料列,聚合函數會傳回 null。
數據型別一律可以藉由檢查 DataType 數據行的 屬性來判斷。 您也可以使用 函 Convert 式來轉換數據類型,如下一節所示。
匯總只能套用至單一數據行,而且匯總內不能使用其他表達式。
功能
支援下列功能。
CONVERT
此函式會將表達式轉換成指定的 .NET 類型。
Convert(expression, type)
| 論點 | 說明 |
|---|---|
expression |
要轉換的表達式。 |
type |
將值轉換後的 .NET 類型。 |
範例:myDataColumn.Expression="Convert(total, 'System.Int32')"
所有轉換都是有效的,但有下列例外狀況:Boolean只能強制轉換至 Byte、SByte、Int16、Int32、Int64、UInt16、UInt32、UInt64、String 和本身。
Char 只能強制和從 Int32、 UInt32、 String和 本身。
DateTime 只能強制轉換為 String 和本身。
TimeSpan 只能強制轉換為 String 和本身。
LEN
此函式會取得字串的長度。
LEN(expression)
| 論點 | 說明 |
|---|---|
expression |
需評估的字串。 |
範例:myDataColumn.Expression="Len(ItemName)"
ISNULL
此函式會檢查表達式,並傳回核取的表達式或取代值。
ISNULL(expression, replacementvalue)
| 論點 | 說明 |
|---|---|
expression |
要檢查的表達式。 |
replacementvalue |
如果 expression 為 null, replacementvalue 則會傳回 。 |
範例:myDataColumn.Expression="IsNull(price, -1)"
IIF
此函式會根據邏輯表達式的結果,取得兩個值的其中一個。
IIF(expr, truepart, falsepart)
| 論點 | 說明 |
|---|---|
expr |
要評估的運算式。 |
truepart |
如果表達式為 true,則傳回的值。 |
falsepart |
如果表達式為 false,則傳回的值。 |
範例:myDataColumn.Expression = "IIF(total>1000, 'expensive', 'dear')
TRIM
此函式會移除所有開頭和尾端空白字元,例如 \r、\n、\t 和 ' '。
TRIM(expression)
| 論點 | 說明 |
|---|---|
expression |
需修剪的表達式。 |
SUBSTRING
此函式會取得指定長度的子字串,從字串中的指定點開始。
SUBSTRING(expression, start, length)
| 論點 | 說明 |
|---|---|
expression |
子字串的來源字串 |
start |
指定子字串開始位置的整數。 |
length |
指定子字串長度的整數。 |
範例:myDataColumn.Expression = "SUBSTRING(phone, 7, 8)"
備註
您可以透過將Expression屬性指派為null值或空字串來重設。 如果在表達式欄上設定預設值,在重設屬性之後,所有先前填滿的行都會被指派預設值。