次の方法で共有


DataColumn.Expression プロパティ

行のフィルタ処理、列内の値の計算、または集約列の作成に使用する式を取得または設定します。

Public Property Expression As String
[C#]
public string Expression {get; set;}
[C++]
public: __property String* get_Expression();public: __property void set_Expression(String*);
[JScript]
public function get Expression() : String;public function set Expression(String);

プロパティ値

集約列内の値の計算または集約列の作成に使用する式。式の戻り型は列の DataType によって決定されます。

例外

例外の種類 条件
ArgumentException AutoIncrement プロパティまたは Unique プロパティが true に設定されます。
FormatException CONVERT 関数を使用すると式が文字列と評価されますが、その文字列には型パラメータに変換できる形式は含まれていません。
InvalidCastException CONVERT 関数を使用する場合は、要求したキャストを実行できません。実行できるキャストの詳細については、次の変換関数を参照してください。
ArgumentOutOfRangeException SUBSTRING 関数を使用する場合は、開始引数が範囲外にあります。

または

SUBSTRING 関数を使用する場合は、長さ引数が範囲外にあります。

Exception LEN 関数または TRIM 関数を使用する場合は、式が文字列と評価されません。これには Char と評価される式も含まれます。

解説

Expression プロパティは、計算列を作成するときにも使用できます。たとえば、税額を計算するには、単価に任意の地域の税率を乗算します。税率は地域によって異なるため、列に単一の税率を格納できません。その代わり、次の Visual Basic コードで示すとおり、 Expression プロパティを使用して値を計算します。

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"

フィルタの式を作成する場合は、文字列を一重引用符で囲みます。

"LastName = 'Jones'"

次に示す文字は特殊文字であるため、これらの文字を列名に使用する場合は、次に説明するようにエスケープする必要があります。

\n (改行)

\t (タブ)

\r (キャリッジ リターン)

~

(

)

#

\

/

=

>

<

+

-

*

%

&

|

^

'

"

[

]

これらの文字のいずれかを列名に使用する場合は、列名を中かっこで囲む必要があります。たとえば、"Column#" という名前の列を式の中で使用する場合は、"[Column#]" と表記する必要があります。

Total * [Column#]

角かっこは特殊文字であるため、列名に中かっこを使用する場合は、円記号 ("\") を使用して角かっこをエスケープする必要があります。たとえば、"Column[]" という名前の列は次のように表記します。

Total * [Column[\]]

(2 番目の角かっこだけをエスケープします。)

ユーザー定義の値

列値と比較するユーザー定義の値を式の中で使用できます。文字列値は一重引用符で囲む必要があります。日付値はシャープ記号 (#) で囲む必要があります。10 進数と指数表記は数値に使用できます。次に例を示します。

"FirstName = 'John'"

"Price <= 50.00"

"Birthdate < #1/31/82#"

列挙値が格納されている列の場合は、値を整数型にキャストします。次に例を示します。

"EnumColumn = 5"

演算子

Boolean 型の AND 演算子、OR 演算子、および NOT 演算子を使用して連結できます。かっこを使用して句をグループ化し、強制的にその句を優先させることができます。AND 演算子はほかの演算子より優先されます。次に例を示します。

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

比較式を作成する場合は、次の演算子を使用できます。

<

>

<=

>=

<>

=

IN

LIKE

式の中で次の算術演算子も使用できます。

+ (加算)

- (減算)

* (乗算)

/ (除算)

% (剰余)

文字列演算子

文字列を連結するには、+ 文字を使用します。文字列比較で大文字と小文字を区別するかどうかは、 DataSet クラスの CaseSensitive プロパティの値で決定します。ただし、 DataTable クラスの CaseSensitive プロパティを使用してこの値をオーバーライドできます。

ワイルドカード文字

* と % はどちらも LIKE 比較の中でワイルドカードとして使用できます。LIKE 句の中の文字列に * または % を使用する場合は、それらの文字を角かっこ ([]) で囲んでエスケープする必要があります。句の角かっこが含まれている場合は、角かっこ文字を角かっこで囲んで ([[]、[]] のように) エスケープする必要があります。ワイルドカードを使用できるのは、パターンの先頭と末尾、パターンの末尾、またはパターンの先頭です。次に例を示します。

"ItemName LIKE '*product*'"

"ItemName LIKE '*product'"

"ItemName LIKE 'product*'"

ワイルドカードは文字列の途中に使用できません。たとえば、"te*xt" とは表記できません。

親子のリレーションシップの参照

列名の前に Parent を付けて、式の中で親テーブルを参照できます。たとえば、 Parent.Price は、親テーブル内の Price という名前の列を参照します。

列名の前に Child を付けて、式の中で子テーブル内の列を参照できます。ただし、子のリレーションシップから複数の行が返される可能性があるため、集約関数には子への参照を含める必要があります。たとえば、 Sum(Child.Price) は、子テーブルの Price という名前の列の合計を返します。

テーブルに複数の子テーブルがある場合の構文は、 Child(RelationName) です。たとえば、テーブルに CustomersOrders という名前の 2 つの子テーブルがあり、 DataRelation オブジェクトの名前が Customers2Orders である場合、参照は次のようになります。

Avg(Child(Customers2Orders).Quantity)

集約

サポートされる集約型は次のとおりです。

Sum (和)

Avg (平均)

Min (最小)

Max (最大)

Count (カウント)

StDev (統計標準偏差)

Var (統計分散)

通常、集約はリレーションシップに沿って実行されます。集約式を作成するには、上記の親子のリレーションシップの参照で詳細を説明するとおり、上記の関数のいずれかと子テーブル列を使用します。次に例を示します。

Avg(Child.Price)

Avg(Child(Orders2Details).Price)

単一のテーブルに対しても集約を実行できます。たとえば、"Price" という名前の列の数字の合計を作成するには、次の構文を使用します。

Sum(Price)

メモ   単一のテーブルを使用して集約を作成する場合は、グループ化基準機能は無効になります。その代わり、すべての行でその列に同じ値が表示されます。

テーブルに行がない場合は、集約機能が null 参照 (Visual Basic では Nothing) を返します。

データ型は、いつでも、列の DataType プロパティをチェックして確認できます。Convert 関数を使用してデータ型を次に示すとおり、変換することもできます。

FUNCTIONS

次の関数もサポートされます。

CONVERT

説明 指定した式を指定した .NET Framework 型に変換します。
構文 Convert( expression, type)
引数 expression -- 変換する式。

type -- 値の変換先の .NET Framework 型。

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

次の例外を除き、すべての変換が有効です。 Boolean は、 ByteSByteInt16Int32Int64UInt16UInt32UInt64String 、およびその型自体との間でだけ強制的に変換できます。Char は、 Int32UInt32 、String、およびその型自体との間でだけ強制的に変換できます。 DateTime は、String およびその型自体との間でだけ強制的に変換できます。 TimeSpan は、String およびその型自体との間でだけ強制的に変換できます。

LEN

説明 文字列の長さを取得します。
構文 LEN( expression)
引数 expression -- 評価する文字列。

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

ISNULL

説明 式をチェックし、チェックした式または置換値のどちらかを返します。
構文 ISNULL( expression, replacementvalue)
引数 expression -- チェックする式。

replacementvalue-- 式が null 参照 (Nothing) の場合は replacementvalue が返されます。

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

IIF

説明 論理式の結果に応じて 2 つの値のどちらかを取得します。
構文 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 値または空の文字列を割り当てます。式が格納されている列に対して既定値が設定されている場合は、 Expression プロパティをリセットすると、以前に値が格納されていたすべての行に既定値が割り当てられます。

使用例

[Visual Basic, C#, C++] DataTable 内に列を 3 つ作成する例を次に示します。2 番目の列と 3 番目の列には式が格納されています。2 番目の列では可変税率を使用して税額が計算され、3 番目の列ではその計算結果が最初の列の値に加算されます。結果として生成されたテーブルが DataGrid コントロールに表示されます。

 
Private Sub CalcColumns()
     Dim cPrice As DataColumn
     Dim cTax As DataColumn
     Dim cTotal As DataColumn
     Dim rate As Single
     rate = .0862
     dim t as DataTable = New DataTable 
 
     ' Create the first column.
     cPrice = New DataColumn
     With cPrice
         .DataType = System.Type.GetType("System.Decimal")
         .ColumnName = "price"
         .DefaultValue = 50
     End With
     
     ' Create the second, calculated, column.
     cTax = New DataColumn
     With cTax
         .DataType = System.Type.GetType("System.Decimal")
         .ColumnName = "tax"
         .Expression = "price * 0.0862"
     End With
     
    ' Create third column
     cTotal = New DataColumn
     With cTotal
         .DataType = System.Type.GetType("System.Decimal")
         .ColumnName = "total"
         .Expression = "price + tax"
     End With
 
     ' Add columns to DataTable
     With t.Columns
         .Add(cPrice)
         .Add(cTax)
         .Add(cTotal)
     End With
    
     Dim r As DataRow
     r = t.NewRow
     t.Rows.Add(r)
     Dim dView As New DataView
     dView.Table = t
     DataGrid1.DataSource = dView
 End Sub

[C#] 
private void CalcColumns(){
    DataColumn cPrice;
    DataColumn cTax;
    DataColumn cTotal;
    DataTable myTable = new DataTable ();
 
    // Create the first column.
    cPrice = new DataColumn();
    cPrice.DataType = System.Type.GetType("System.Decimal");
    cPrice.ColumnName = "price";
    cPrice.DefaultValue = 50;
         
    // Create the second, calculated, column.
    cTax = new DataColumn();
    cTax.DataType = System.Type.GetType("System.Decimal");
    cTax.ColumnName = "tax";
    cTax.Expression = "price * 0.0862";
         
    // Create third column.
    cTotal = new DataColumn();
    cTotal.DataType = System.Type.GetType("System.Decimal");
    cTotal.ColumnName = "total";
    cTotal.Expression = "price + tax";
    
    // Add columns to DataTable.
    myTable.Columns.Add(cPrice);
    myTable.Columns.Add(cTax);
    myTable.Columns.Add(cTotal);
    DataRow myRow;
    myRow = myTable.NewRow();
    myTable.Rows.Add(myRow);
    DataView myView = new DataView(myTable);
    dataGrid1.DataSource = myView;
 }

[C++] 
private:
void CalcColumns(){
    DataColumn* cPrice;
    DataColumn* cTax;
    DataColumn* cTotal;
    DataTable* myTable = new DataTable ();
 
    // Create the first column.
    cPrice = new DataColumn();
    cPrice->DataType = System::Type::GetType(S"System.Decimal");
    cPrice->ColumnName = S"price";
    cPrice->DefaultValue = __box(50);
         
    // Create the second, calculated, column.
    cTax = new DataColumn();
    cTax->DataType = System::Type::GetType(S"System.Decimal");
    cTax->ColumnName = S"tax";
    cTax->Expression = S"price * 0.0862";
         
    // Create third column.
    cTotal = new DataColumn();
    cTotal->DataType = System::Type::GetType(S"System.Decimal");
    cTotal->ColumnName = S"total";
    cTotal->Expression = S"price + tax";
    
    // Add columns to DataTable.
    myTable->Columns->Add(cPrice);
    myTable->Columns->Add(cTax);
    myTable->Columns->Add(cTotal);
    DataRow* myRow;
    myRow = myTable->NewRow();
    myTable->Rows->Add(myRow);
    DataView* myView = new DataView(myTable);
    dataGrid1->DataSource = myView;
 }

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET

参照

DataColumn クラス | DataColumn メンバ | System.Data 名前空間