.NET Framework 類別庫
DataColumn..::.Expression 屬性

更新:2007 年 11 月

取得或設定運算式,用來篩選資料列、計算資料行中的值或建立彙總資料行。

命名空間:  System.Data
組件:  System.Data (在 System.Data.dll 中)
語法

Visual Basic (宣告)
Public Property Expression As String
Visual Basic (使用方式)
Dim instance As DataColumn
Dim value As String

value = instance.Expression

instance.Expression = value
C#
public string Expression { get; set; }
Visual C++
public:
property String^ Expression {
    String^ get ();
    void set (String^ value);
}
J#
/** @property */
public String get_Expression()
/** @property */
public  void set_Expression(String value)
JScript
public function get Expression () : String
public function set Expression (value : String)

屬性值

型別:System..::.String
運算式,用來計算資料行的值或建立彙總資料行。運算式的傳回型別是由資料行的 DataType 所判斷。
例外狀況

例外狀況條件
ArgumentException

AutoIncrementUnique 屬性是設定為 true

FormatException

在使用 CONVERT 函式時,運算式評估為字串,但是字串不包含可以轉變為型別參數的表示。

InvalidCastException

在使用 CONVERT 函式時,不可能進行所要求的轉型。請參閱下面段落中的型別轉換函式 (Conversion Function),取得有關可能轉型的詳細資訊。

ArgumentOutOfRangeException

在使用 SUBSTRING 函式時,起始引數超出範圍。

-或-

在使用 SUBSTRING 函式時,長度引數超出範圍。

Exception

在使用 LEN 函式或 TRIM 函式時,運算式不會評估為字串。這包括評估為 Char 的運算式。

備註

Expression 屬性的一種用途是建立計算的資料行。例如,若要計算稅值,單位價格是乘以特定地區的稅率。既然稅率因地區不同而變化,所以不可能在資料行中輸入單一稅率,而必須使用 Expression 屬性來計算該值,如下面段落中的 Visual Basic 程式碼所示:

DataSet1.Tables("Products").Columns("tax").Expression = "UnitPrice * 0.086"

第二種用途是建立彙總資料行。彙總和計算的值相似,都是根據在 DataTable 中的整組資料列來執行運算。簡單的範例就是計算該組中傳回的資料列數。這種計算方法就是某個行銷人員用來計算所完成交易數的方法,如下列 Visual Basic 程式碼中所示:

 DataSet1.Tables("Orders").Columns("OrderCount").Expression = "Count(OrderID)"

運算式語法

在建立運算式時,使用 ColumnName 屬性來參考資料行。例如,如果一個資料行的 ColumnName 是 "UnitPrice",而另一個是 "Quantity",則運算式將會如下所示:

"UnitPrice * Quantity"

cabd21yw.alert_note(zh-tw,VS.90).gif注意事項:

如果運算式中使用了資料行,則這個運算式對該資料行具有相依性。如果相依的資料行重新命名或刪除,並不會擲回例外狀況。當存取這個已中斷的運算式資料行時,則會擲回例外狀況。

在建立篩選條件的運算式時,將字串放在英文單引號之中:

"LastName = 'Jones'"

下列字元是特殊字元,如以下解釋所述,如果這些字元用在資料行名稱中,則必須逸出:

\n (新行字元)

\t (定位字元)

\r (歸位字元)

~

(

)

#

\

/

=

>

<

+

-

*

%

&

|

^

'

"

[

]

如果資料行名稱含有上述其中一個字元,則名稱必須放在括號之中。例如,若要在運算式中使用命名為 "Column#" 的資料行,你應該寫成 "[Column#]"。

Total * [Column#]

因為括號是特殊字元,所以如果它是資料行名稱的部分,則你必須使用斜線 ("\") 來逸出括號。例如,命名為 "Column[]" 的資料行將會寫成:

Total * [Column[\]]

(只有第二個括號必須逸出)。

USER-DEFINED VALUES

使用者定義的值可以用在運算式中,與資料行值進行比較。字串值應該放在英文單引號之中。日期值應該依據資料提供者 (Data Provider) 的差異而放在井字號 (#) 或單引號 (') 之中。對數值來說,十進位和科學標記都可以使用。例如:

"FirstName = 'John'"

"Price <= 50.00"

"Birthdate < #1/31/82#"

對於含有列舉值的資料行,請將值轉型為整數資料型別。例如:

"EnumColumn = 5"

OPERATORS

串連允許使用布林值 AND、OR 和 NOT 運算子。你可以使用括號來設定子句的群組,並強制優先順序。AND 運算子優先於其他的運算子。例如:

(LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'

在建立比較運算式時,允許下列的運算子:

<

>

<=

>=

<>

=

IN

LIKE

在運算式中也支援下列的算術運算子:

+ (加法)

- (減法)

* (乘法)

/ (除法)

% (模數)

STRING OPERATORS

若要串連字串,請使用 + 字元。DataSet 類别的 CaseSensitive 屬性值會決定字串比較是否區分大小寫。但是你可以使用 DataTable 類別的 CaseSensitive 屬性來覆寫該值。

萬用字元

* 和 % 都可以在 LIKE 比較中做為萬用字元來交替使用。如果在 LIKE 子句的字串含有 * 或 %,則這些字元應該在括號 ([]) 中逸出。如果括號在子句中,則括號字元應該在括號 (例如 [[] 或 []]) 中逸出。萬用字元允許用在模式的開端和末端、或用在模式的末端,或用在模式的開端。例如:

"ItemName LIKE '*product*'"

"ItemName LIKE '*product'"

"ItemName LIKE 'product*'"

萬用字元不允許用在字串的中間。例如,不允許 'te*xt'。

父代 / 子代關係參考

在運算式中可藉由在資料行名稱前面加上 Parent,來參考父資料表。例如,Parent.Price 會參考父資料表中名為 Price 的資料行。

在運算式中可藉由在資料行名稱前面加上 Child,來參考子資料表中的資料行。但是,因為子關聯性 (Relationship) 可能會傳回多個資料列,所以您必須將子資料行的參考包含在彙總函式中。例如,Sum(Child.Price) 會傳回子資料表中名稱為 Price 之資料行的總和。

如果資料表具有一個以上的子資料表,則語法為:Child(RelationName)。例如,如果資料表具有兩個名稱為 CustomersOrders 的子資料表,而且 DataRelation 物件命名為 Customers2Orders,則參考就會如下所示:

Avg(Child(Customers2Orders).Quantity)

AGGREGATES

下列為支援的彙總型別:

Sum (總和)

Avg (平均值)

Min (最小值)

Max (最大值)

Count (計數)

StDev (統計標準差)

Var (統計變異數)

彙總通常依照關聯性 (Relationship) 來執行。藉由使用上面所列的其中一個函式和在上述 PARENT/CHILD RELATION REFERENCING 中詳細說明的子資料表資料行,建立彙總運算式。例如:

Avg(Child.Price)

Avg(Child(Orders2Details).Price)

彙總也可以在單一資料表上執行。例如,若要在命名為 "Price" 的資料行中建立圖形摘要:

Sum(Price)

cabd21yw.alert_note(zh-tw,VS.90).gif注意事項:

如果你使用單一資料表來建立彙總,則將不會有根據群組建立的函式。所有的資料列反而將在資料行中顯示相同的值。

如果資料表不具有資料列,則彙總函式將傳回 nullNothingnullptrNull 參照 (即 Visual Basic 中的 Nothing)

資料型別永遠可以由檢查資料行的 DataType 屬性來判斷。你也可以使用轉換型別函式來轉換資料型別,如下面段落中所示。

FUNCTIONS

也支援下列的函式:

CONVERT

說明

將特定的運算式轉換為指定的 .NET Framework 型別。

語法

Convert(expression, type)

引數

expression -- 要轉換的運算式。

type -- 值將轉換成的 .NET Framework 型別。

範例:myDataColumn.Expression="Convert(total, 'System.Int32')"

具有下列例外狀況的所有轉換都有效:Boolean 只可以強制 ByteSByteInt16Int32Int64UInt16UInt32UInt64String 和它本身之間的轉換。Char 只可以強制 Int32UInt32String 和它本身之間的轉換。DateTime 只可以強制於 String 和它本身。TimeSpan 只可以強制 String 和它本身之間的轉換。

LEN

說明

取得字串的長度。

語法

LEN(expression)

引數

expression -- 要評估的字串。

範例:myDataColumn.Expression="Len(ItemName)"

ISNULL

說明

檢查運算式,並且傳回檢查的運算式,或傳回取代的值。

語法

ISNULL(expression, replacementvalue)

引數

expression -- 要檢查的運算式。

replacementvalue -- 如果運算式是 nullNothingnullptrNull 參照 (即 Visual Basic 中的 Nothing),則傳回 replacementvalue

範例:myDataColumn.Expression="IsNull(price, -1)"

IIF

說明

根據邏輯運算式的結果,取得兩個值的其中一個。

語法

IIF(expr, truepart, falsepart)

引數

expr -- 要評估的運算式。

truepart -- 如果運算式為 True 時要傳回的值。

falsepart -- 如果運算式為 False 時要傳回的值。

範例:myDataColumn.Expression = "IIF(total&gt;1000, 'expensive', 'dear')

TRIM

說明

移除所有前置和後置的空白字元,例如 \r、\n、\t、' '。

語法

TRIM(expression)

引數

expression -- 要修剪的運算式。

SUBSTRING

說明

取得指定長度的子字串,開始於字串中的指定點。

語法

SUBSTRING(expression, start, length)

引數

expression -- 子字串的來源字串。

start -- 指定子字串開始處的整數。

length -- 指定子字串長度的整數。

範例:myDataColumn.Expression = "SUBSTRING(phone, 7, 8)"

cabd21yw.alert_note(zh-tw,VS.90).gif注意事項:

你可以藉由為它指派 Null 值或空字串來重設 Expression 屬性。如果預設值是設定在運算式資料行上,則在重設 Expression 屬性之後,預設值會指派給所有先前所填入的資料列。

範例

下列範例會在 DataTable 中建立三個資料行。第二和第三資料行包含運算式,第二個會使用可變稅率來計算稅額,第三個會將計算結果加入至第一個資料行的值。產生的資料表會顯示在 DataGrid 控制項中。

Visual Basic
Private Sub CalcColumns()
     Dim rate As Single = .0862
     dim table as DataTable = New DataTable 

     ' Create the first column.
     Dim priceColumn As DataColumn = New DataColumn
     With priceColumn
         .DataType = System.Type.GetType("System.Decimal")
         .ColumnName = "price"
         .DefaultValue = 50
     End With

     ' Create the second, calculated, column.
     Dim taxColumn As DataColumn = New DataColumn
     With taxColumn
         .DataType = System.Type.GetType("System.Decimal")
         .ColumnName = "tax"
         .Expression = "price * 0.0862"
     End With

    ' Create third column
     Dim totalColumn As DataColumn = New DataColumn
     With totalColumn
         .DataType = System.Type.GetType("System.Decimal")
         .ColumnName = "total"
         .Expression = "price + tax"
     End With

     ' Add columns to DataTable
     With table.Columns
         .Add(priceColumn)
         .Add(taxColumn)
         .Add(totalColumn)
     End With

     Dim row As DataRow= table.NewRow
     table.Rows.Add(row)
     Dim view As New DataView
     view.Table = table
     DataGrid1.DataSource = view
 End Sub
C#
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;
}
平台

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile for Smartphone, Windows Mobile for Pocket PC, Xbox 360

.NET Framework 和 .NET Compact Framework 並不支援各種平台的所有版本。如需支援平台版本的相關資訊,請參閱 .NET Framework 系統需求
版本資訊

.NET Framework

支援版本:3.5、3.0、2.0、1.1、1.0

.NET Compact Framework

支援版本:3.5、2.0、1.0

XNA Framework

支援版本:1.0
請參閱

參考

其他資源

標記 :


Page view tracker