DataColumn.Expression プロパティ


行のフィルター処理、列内の値の計算、または集約列の作成に使用する式を取得または設定します。Gets or sets the expression used to filter rows, calculate the values in a column, or create an aggregate column.

 property System::String ^ Expression { System::String ^ get(); void set(System::String ^ value); };
public string Expression { get; set; }
public string Expression { get; set; }
member this.Expression : string with get, set
Public Property Expression As String


集約列内の値の計算または集約列の作成に使用する式。An expression to calculate the value of a column, or create an aggregate column. 式の戻り型は列の DataType によって決定されます。The return type of an expression is determined by the DataType of the column.



AutoIncrement プロパティまたは Unique プロパティが true に設定されます。The AutoIncrement or Unique property is set to true.

CONVERT 関数を使用すると式が文字列と評価されますが、その文字列には型パラメーターに変換できる形式は含まれていません。When you are using the CONVERT function, the expression evaluates to a string, but the string does not contain a representation that can be converted to the type parameter.

CONVERT 関数を使用する場合は、要求したキャストを実行できません。When you are using the CONVERT function, the requested cast is not possible. 実行できるキャストの詳細については、以降のセクションで変換関数に関するトピックを参照してください。See the Conversion function in the following section for detailed information about possible casts.

SUBSTRING 関数を使用する場合は、開始引数が範囲外にあります。When you use the SUBSTRING function, the start argument is out of range.

- または --Or-

SUBSTRING 関数を使用する場合は、長さ引数が範囲外にあります。When you use the SUBSTRING function, the length argument is out of range.

LEN 関数または TRIM 関数を使用する場合は、式が文字列と評価されません。When you use the LEN function or the TRIM function, the expression does not evaluate to a string. これには Char と評価される式も含まれます。This includes expressions that evaluate to Char.

次の例では、DataTableに3つの列を作成します。The following example creates three columns in a DataTable. 2番目と3番目の列には式が含まれています。2番目の例では、税額を使用して税金を計算し、3番目の計算結果を1番目の列の値に加算します。The second and third columns contain expressions; the second calculates tax using a variable tax rate, and the third adds the result of the calculation to the value of the first column. 結果のテーブルが DataGrid コントロールに表示されます。The resulting table is displayed in a DataGrid control.

   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.

       DataRow row = table.NewRow();
       DataView view = new DataView(table);
       dataGrid1.DataSource = view;
Private Sub CalcColumns()
     Dim rate As Single = .0862
     Dim table As New DataTable()
     ' Create the first column.
     Dim priceColumn As New DataColumn()
     With priceColumn
         .DataType = System.Type.GetType("System.Decimal")
         .ColumnName = "price"
         .DefaultValue = 50
     End With
     ' Create the second, calculated, column.
     Dim taxColumn As New DataColumn()
     With taxColumn
         .DataType = System.Type.GetType("System.Decimal")
         .ColumnName = "tax"
         .Expression = "price * 0.0862"
     End With
    ' Create third column
     Dim totalColumn As New DataColumn()
     With totalColumn
         .DataType = System.Type.GetType("System.Decimal")
         .ColumnName = "total"
         .Expression = "price + tax"
     End With
     ' Add columns to DataTable
     With table.Columns
     End With
     Dim row As DataRow= table.NewRow
     Dim view As New DataView
     view.Table = table
     DataGrid1.DataSource = view
 End Sub


Expression プロパティの使用方法の1つは、計算列を作成することです。One use of the Expression property is to create calculated columns. たとえば、税の値を計算する場合、単価には特定の地域の税率が乗算されます。For example, to calculate a tax value, the unit price is multiplied by a tax rate of a specific region. 税率は地域によって異なるため、1つの列に1つの税率を設定することはできません。代わりに、次のセクションの Visual Basic コードに示すように、Expression プロパティを使用して値が計算されます。Because tax rates vary from region to region, it would be impossible to put a single tax rate in a column; instead, the value is calculated using the Expression property, as shown in the Visual Basic code in the following section:

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

もう1つの用途は、集計列を作成することです。A second use is to create an aggregate column. 集計値と同様に、集計は、DataTable内の行の完全なセットに基づいて操作を実行します。Similar to a calculated value, an aggregate performs an operation based on the complete set of rows in the DataTable. 単純な例として、セットで返される行の数をカウントします。A simple example is to count the number of rows returned in the set. これは、次の Visual Basic コードに示すように、特定の販売員によって完了したトランザクションの数をカウントするために使用する方法です。This is the method you would use to count the number of transactions completed by a particular salesperson, as shown in this Visual Basic code:

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

式の構文Expression Syntax

式を作成する場合は、ColumnName プロパティを使用して列を参照します。When you create an expression, use the ColumnName property to refer to columns. たとえば、ある列の ColumnName が "UnitPrice"、もう1つの "Quantity" の場合、式は次のようになります。For example, if the ColumnName for one column is "UnitPrice", and another "Quantity", the expression would be as follows:

"UnitPrice * Quantity""UnitPrice * Quantity"


列が式で使用されている場合、式はその列に依存していると言います。If a column is used in an expression, then the expression is said to have a dependency on that column. 依存列の名前が変更または削除された場合、例外はスローされません。If a dependent column is renamed or removed, no exception is thrown. 現在、破損した式列にアクセスすると、例外がスローされます。An exception will be thrown when the now-broken expression column is accessed.

フィルターの式を作成する場合は、文字列を単一引用符で囲みます。When you create an expression for a filter, enclose strings with single quotation marks:

"LastName = ' Jones '""LastName = 'Jones'"

列名に英数字以外の文字が含まれている場合、または次の予約語のいずれかに該当する場合は、次の段落に記載されているように、特別な処理が必要になります。If a column name contains any non-alphanumeric characters or starts with a digit or matches (case-insensitively) any of the following reserved words, it requires special handling, as described in the following paragraphs.













列名が上記のいずれかの条件を満たす場合は、角かっこまたは "'" (アクサングラーブ) 引用符で囲む必要があります。If a column name satisfies one of the above conditions, it must be wrapped in either square brackets or the "`" (grave accent) quotes. たとえば、式で "Column #" という名前の列を使用するには、"[Column #]" と記述します。For example, to use a column named "Column#" in an expression, you would write either "[Column#]":

合計 * [列 #]Total * [Column#]

または "`列 # '":or "`Column#`":

Total * `列 # 'Total * `Column#`

列名が角かっこで囲まれている場合、任意の '] ' 文字と '\' 文字 (他の文字は含まれません) は、円記号 ("\") 文字を前に付加することによってエスケープする必要があります。If the column name is enclosed in square brackets then any ']' and '\' characters (but not any other characters) in it must be escaped by prepending them with the backslash ("\") character. 列名がアクサングラーブ文字で囲まれている場合は、その列にアクサングラーブ文字を含めることはできません。If the column name is enclosed in grave accent characters then it must not contain any grave accent characters in it. たとえば、"Column []\" という名前の列が書き込まれます。For example, a column named "Column[]\" would be written:

合計 * [列 [\]\\]Total * [Column[\]\\]


合計 * `列 []\</span><span class="sxs-lookup"><span data-stu-id="1fb78-310">Total \* \Column[]\`

ユーザー定義の値User-Defined Values

ユーザー定義の値は、式の中で列の値と比較するために使用できます。User-defined values may be used within expressions to be compared with column values. 文字列値は単一引用符で囲む必要があります (つまり、文字列値の各単一引用符文字を、別の単一引用符で囲んでエスケープする必要があります)。String values should be enclosed within single quotation marks (and each single quotation character in a string value has to be escaped by prepending it with another single quotation character). 日付の値は、データプロバイダーに基づくシャープ記号 (#) または単一引用符 (') で囲む必要があります。Date values should be enclosed within pound signs (#) or single quotes (') based on the data provider. 数値には、小数点と指数表記を使用できます。Decimals and scientific notation are permissible for numeric values. 例:For example:

"FirstName = ' John '""FirstName = 'John'"

"Price < = 50.00""Price <= 50.00"

"誕生日 < #1/31/82 #""Birthdate < #1/31/82#"

列挙値を含む列の場合は、整数データ型に値をキャストします。For columns that contain enumeration values, cast the value to an integer data type. 例:For example:

"EnumColumn = 5""EnumColumn = 5"

リテラル式の解析Parsing Literal Expressions

すべてのリテラル式は、インバリアントカルチャロケールで表現する必要があります。All literal expressions must be expressed in the invariant culture locale. DataSet がリテラル式を解析して変換するときは、現在のカルチャではなく、常にインバリアントカルチャを使用します。When DataSet parses and converts literal expressions, it always uses the invariant culture, not the current culture.

文字列リテラルは、値を囲む単一引用符がある場合に識別されます。String literals are identified when there are single quotes surrounding the value. 例:For example:


Boolean リテラルは true と false です。式では引用符で囲まれていません。Boolean literals are true and false; they are not quoted in expressions.

Integer リテラル [+-]?[0-9] + は System.Int32System.Int64 または System.Doubleとして扱われます。Integer literals [+-]?[0-9]+ are treated as System.Int32, System.Int64 or System.Double. 数値の大きさによっては、System.Double の精度が失われる可能性があります。System.Double can lose precision depending on how large the number is. たとえば、リテラルの数値が2147483650の場合、DataSet はまず、Int32として数値を解析しようとします。For example, if the number in the literal is 2147483650, DataSet will first attempt to parse the number as an Int32. 数値が大きすぎるため、この操作は成功しません。This will not succeed because the number is too large. この場合、DataSet は数値を Int64として解析します。これは成功します。In this case DataSet will parse the number as an Int64, which will succeed. リテラルが Int64 の最大値よりも大きい数値の場合、DataSetDoubleを使用してリテラルを解析します。If the literal was a number larger than the maximum value of an Int64, DataSet will parse the literal using Double.

4.42372 E-30 など、科学的表記法を使用した実数リテラルは System.Doubleを使用して解析されます。Real literals using scientific notation, such as 4.42372E-30, are parsed using System.Double.

指数表記のない実数リテラルは、小数点を使用して、System.Decimalとして扱われます。Real literals without scientific notation, but with a decimal point, are treated as System.Decimal. 数値が System.Decimalでサポートされている最大値または最小値を超えた場合、System.Doubleとして解析されます。If the number exceeds the maximum or minimum values supported by System.Decimal, then it is parsed as a System.Double. 例:For example:

142526.144524 は Decimalに変換されます。142526.144524 will be converted to a Decimal.

345262.78036719560925667 は Doubleとして扱われます。345262.78036719560925667 will be treated as a Double.


連結は、ブール型の AND、OR、および NOT 演算子を使用して許可されます。Concatenation is allowed using Boolean AND, OR, and NOT operators. かっこを使用して句をグループ化し、優先順位を強制することができます。You can use parentheses to group clauses and force precedence. AND 演算子は、他の演算子よりも優先されます。The AND operator has precedence over other operators. 例:For example:

(LastName = ' Smith ' または LastName = ' Jones ')および FirstName = ' John '(LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'

比較式を作成する場合は、次の演算子を使用できます。When you create comparison expressions, the following operators are allowed:









式では、次の算術演算子もサポートされています。The following arithmetic operators are also supported in expressions:

+ (追加)+ (addition)

- (減算)- (subtraction)

* (乗算)* (multiplication)

/(除算)/ (division)

% (剰余)% (modulus)

文字列演算子String Operators

文字列を連結するには、+ 文字を使用します。To concatenate a string, use the + character. DataSet クラスの CaseSensitive プロパティの値は、文字列比較で大文字と小文字を区別するかどうかを決定します。The value of the CaseSensitive property of the DataSet class determines whether string comparisons are case-sensitive. ただし、この値は、DataTable クラスの CaseSensitive プロパティを使用してオーバーライドできます。However, you can override that value with the CaseSensitive property of the DataTable class.

ワイルドカード文字Wildcard Characters

LIKE 比較では、* と% の両方をワイルドカード文字と同じ意味で使用できます。Both the * and % can be used interchangeably for wildcard characters in a LIKE comparison. LIKE 句の文字列に * または% が含まれている場合、それらの文字は角かっこ ([]) で囲む必要があります。If the string in a LIKE clause contains a * or %, those characters should be enclosed in brackets ([]). かっこが句に含まれている場合は、各角かっこ文字を角かっこで囲む必要があります (たとえば [[] または []])。If a bracket is in the clause, each bracket character should be enclosed in brackets (for example [[] or []]). ワイルドカードは、パターンの先頭と末尾、パターンの末尾、またはパターンの先頭で使用できます。A wildcard is allowed at the start and end of a pattern, or at the end of a pattern, or at the start of a pattern. 例:For example:

"ItemName LIKE ' * product*'""ItemName LIKE '*product*'"

"ItemName LIKE '*product'""ItemName LIKE '*product'"

"ItemName LIKE 'product*'""ItemName LIKE 'product*'"

文字列の途中では、ワイルドカード文字は使用できません。Wildcard characters are not allowed in the middle of a string. たとえば、' te * xt ' は使用できません。For example, 'te*xt' is not allowed.

親/子のリレーションシップを参照していますParent/Child Relation Referencing

親テーブルを式で参照するには、Parentで列名を前に付加します。A parent table may be referenced in an expression by prepending the column name with Parent. たとえば、Parent.PricePriceという親テーブルの列を参照します。For example, the Parent.Price references the parent table's column named Price.

子に複数の親行がある場合は、Parent (RelationName) を使用します。ColumnName.When a child has more than one parent row, use Parent(RelationName).ColumnName. たとえば、親 (RelationName) のようになります。Price は、親テーブルの Price という名前の列を参照します。For example, the Parent(RelationName).Price references the parent table's column named Price via the relation.

子テーブル内の列は、Childで列名を付加することによって、式内で参照できます。A column in a child table may be referenced in an expression by prepending the column name with Child. ただし、子リレーションシップは複数の行を返す可能性があるため、集計関数の子列への参照を含める必要があります。However, because child relationships may return multiple rows, you must include the reference to the child column in an aggregate function. たとえば、Sum(Child.Price) は、子テーブル内の Price という名前の列の合計を返します。For example, Sum(Child.Price) would return the sum of the column named Price in the child table.

テーブルに複数の子がある場合、構文は Child(RelationName)になります。If a table has more than one child, the syntax is: Child(RelationName). たとえば、テーブルに CustomersOrdersという名前の2つの子テーブルがあり、DataRelation オブジェクトの名前が Customers2Ordersの場合、参照は次のようになります。For example, if a table has two child tables named Customers and Orders, and the DataRelation object is named Customers2Orders, the reference would be as follows:

Avg (Child (Customers2Orders)。済Avg(Child(Customers2Orders).Quantity)


次の集計の種類がサポートされています。The following aggregate types are supported:

合計 (合計)Sum (Sum)

平均 (平均)Avg (Average)

最小 (最小)Min (Minimum)

最大 (最大)Max (Maximum)

カウント (カウント)Count (Count)

StDev (統計的標準偏差)StDev (Statistical standard deviation)

Var (統計的分散)。Var (Statistical variance).

通常、集計はリレーションシップに沿って実行されます。Aggregates are ordinarily performed along relationships. 前に説明した「親子関係」で説明したように、前に示した関数のいずれかを使用して集計式を作成します。Create an aggregate expression by using one of the functions listed earlier and a child table column as detailed in Parent/Child Relation Referencing that was discussed earlier. 例:For example:

Avg (Child. Price)Avg(Child.Price)

Avg (Child (Orders2Details)。標準Avg(Child(Orders2Details).Price)

1つのテーブルに対して集計を実行することもできます。An aggregate can also be performed on a single table. たとえば、"Price" という名前の列に数値の概要を作成するには、次のようにします。For example, to create a summary of figures in a column named "Price":



1つのテーブルを使用して集計を作成する場合は、グループ化の機能はありません。If you use a single table to create an aggregate, there would be no group-by functionality. 代わりに、すべての行で同じ値が列に表示されます。Instead, all rows would display the same value in the column.

テーブルに行がない場合、集計関数は nullを返します。If a table has no rows, the aggregate functions will return null.

データ型は、常に列の DataType プロパティを調べることによって決定できます。Data types can always be determined by examining the DataType property of a column. 次のセクションに示すように、Convert 関数を使用してデータ型を変換することもできます。You can also convert data types using the Convert function, shown in the following section.

集計は1つの列にのみ適用でき、集計内で他の式を使用することはできません。An aggregate can only be applied to a single column and no other expressions can be used inside the aggregate.


次の関数もサポートされています。The following functions are also supported:


説明Description 特定の式を指定した .NET Framework 型に変換します。Converts particular expression to a specified .NET Framework Type.
構文Syntax Convert (expressiontype)Convert(expression, type)
引数Arguments expression-変換する式。expression -- The expression to convert.

type-値が変換される .NET Framework 型。type -- The .NET Framework type to which the value will be converted.

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

すべての変換は、次の例外で有効です。 Boolean は、ByteSByteInt16Int32Int64UInt16UInt32UInt64String のみに強制的に変換できます。All conversions are valid with the following exceptions: Boolean can be coerced to and from Byte, SByte, Int16, Int32, Int64, UInt16, UInt32, UInt64, String and itself only. Char は、Int32UInt32String、およびそれ自体との間で強制的に変換することができます。Char can be coerced to and from Int32, UInt32, String, and itself only. DateTime は、String だけに強制的に変換できます。DateTime can be coerced to and from String and itself only. TimeSpan は、String だけに強制的に変換できます。TimeSpan can be coerced to and from String and itself only.


説明Description 文字列の長さを取得します。Gets the length of a string
構文Syntax LEN (expression)LEN(expression)
引数Arguments expression-評価される文字列。expression -- The string to be evaluated.

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


説明Description 式を確認し、チェックされた式または置換値を返します。Checks an expression and either returns the checked expression or a replacement value.
構文Syntax ISNULL (expressionreplacementvalue)ISNULL(expression, replacementvalue)
引数Arguments expression--チェックする式。expression -- The expression to check.

replacementvalue--expression が null場合、replacementvalue が返されます。replacementvalue -- If expression is null, replacementvalue is returned.

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


説明Description 論理式の結果に応じて、2つの値のいずれかを取得します。Gets one of two values depending on the result of a logical expression.
構文Syntax IIF (exprtruepartfalsepart)IIF(expr, truepart, falsepart)
引数Arguments expr-評価する式。expr -- The expression to evaluate.

truepart-式が true の場合に返される値。truepart -- The value to return if the expression is true.

falsepart-式が false の場合に返す値。falsepart -- The value to return if the expression is false.

例: myDataColumn. Expression = "IIF (合計 > 1000, ' 高額 ', ' 各位 ')Example: myDataColumn.Expression = "IIF(total>1000, 'expensive', 'dear')


説明Description 先頭と末尾の空白文字 (\r、\n、\t、' ' など) をすべて削除します。Removes all leading and trailing blank characters like \r, \n, \t, ' '
構文Syntax TRIM (expression)TRIM(expression)
引数Arguments expression--トリムする式。expression -- The expression to trim.


説明Description 文字列内の指定した位置を開始位置として、指定した長さのサブ文字列を取得します。Gets a sub-string of a specified length, starting at a specified point in the string.
構文Syntax SUBSTRING (expressionstartlength)SUBSTRING(expression, start, length)
引数Arguments expression--部分文字列のソース文字列。expression -- The source string for the substring.

start--部分文字列の開始位置を指定する整数。start -- Integer that specifies where the substring starts.

length--部分文字列の長さを指定する整数。length -- Integer that specifies the length of the substring.

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


Expression プロパティをリセットするには、null 値または空の文字列を割り当てます。You can reset the Expression property by assigning it a null value or empty string. [式] 列に既定値が設定されている場合は、[Expression] プロパティがリセットされた後に、以前に入力したすべての行に既定値が割り当てられます。If a default value is set on the expression column, all previously filled rows are assigned the default value after the Expression property is reset.