System.Data.DataColumn.Expression 屬性
本文提供此 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'
當您建立比較表示式時,允許下列運算子:
- <
- >
- <=
- >=
- =
IN
LIKE
運算式中也支援下列算術運算子:
- + (加)
- - (減法)
- * (乘)
- / (除)
- % (模數)
字串運算子
若要串連字串串,請使用 +
字元。 類別的 CaseSensitive DataSet 屬性值會判斷字串比較是否區分大小寫。 不過,您可以使用 類別的 DataTable 屬性覆寫該值CaseSensitive。
通配符
*
和 %
字元都可以在 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)
。 例如,如果數據表有兩個名為 和 Orders
的子數據表Customers
,而且 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)
Argument | 描述 |
---|---|
expression |
要轉換的 運算式。 |
type |
將轉換值的 .NET 類型。 |
範例: myDataColumn.Expression="Convert(total, 'System.Int32')"
所有轉換都是有效的,但有下列例外狀況:Boolean
只能強制轉換至 Byte
、、 Int64
UInt16
Int32
UInt64
SByte
String
Int16
UInt32
和 本身。 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)
Argument | 描述 |
---|---|
expression |
要修剪的表達式。 |
SUBSTRING
此函式會取得指定長度的子字串,從字串中的指定點開始。
SUBSTRING(expression, start, length)
Argument | 描述 |
---|---|
expression |
子字串的來源字串 |
start |
指定子字串開始位置的整數。 |
length |
指定子字串長度的整數。 |
範例: myDataColumn.Expression = "SUBSTRING(phone, 7, 8)"
注意
您可以藉由指派 Null 值或空字串來重 Expression 設屬性。 如果在表達式數據行上設定預設值,所有先前填滿的數據列都會在重設屬性之後 Expression 指派預設值。