DataColumn.Expression DataColumn.Expression DataColumn.Expression DataColumn.Expression Property

定義

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

public:
 property System::String ^ Expression { System::String ^ get(); void set(System::String ^ value); };
[System.Data.DataSysDescription("DataColumnExpressionDescr")]
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.

次の例は、3 つの列を作成、DataTableします。The following example creates three columns in a DataTable. 2 番目と 3 番目の列の式を含めることが2 つ目は、税の税率変数を使用してを計算し、3 つ目の最初の列の値を計算の結果を追加します。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.
    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;
}
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

注釈

用途の 1 つ、Expressionプロパティは、計算列を作成します。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. 税率に領域が異なるためにできなくなる; 列に単一の税率を格納すること代わりに、値は計算を使用して、Expressionプロパティは、次のセクションでは、Visual Basic コードで示すようにします。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") します。Columns("tax") します。式 ="UnitPrice * 0.086"DataSet1.Tables("Products").Columns("tax").Expression = "UnitPrice * 0.086"

第 2 の用途では、集計列を作成します。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 1 つの列は、"UnitPrice"と別の"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'"

列名は、任意の英数字以外の文字が含まれています、1 桁の数字で始まるまたはまたは次の予約語のいずれかに一致 (大文字小文字)、次の段落で説明されているように、特別な処理が必要です。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.

AndAnd

Between

Child

FalseFalse

インIn

IsIs

LikeLike

NotNot

NullNull

またはOr

Parent

TrueTrue

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

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

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

合計 *`列 #'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. という名前の列など、"列の\"書き込まれます。For example, a column named "Column[]\" would be written:

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

またはor

合計 *`列\</span><span class="sxs-lookup"><span data-stu-id="31888-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. 10 進数と指数表記の数値の許容されます。Decimals and scientific notation are permissible for numeric values. 例:For example:

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

"価格 < 50.00 =""Price <= 50.00"

"Birthdate < #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:

"John"'John'

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. たとえば、リテラルの数が、2147483650DataSetを数値として解析はまず、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 の最大値より大きい数値が場合DataSetリテラルを使用して、解析Doubleします。If the literal was a number larger than the maximum value of an Int64, DataSet will parse the literal using Double.

4.42372E など、科学的表記法を使用して実際のリテラル-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.

演算子Operators

ブール型 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:

<

<=

=

<>

=

ININ

LIKELIKE

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

+ (加算)+ (addition)

- (減算)- (subtraction)

* (乗算)* (multiplication)

/(除算)/ (division)

% (剰余)% (modulus)

文字列演算子String Operators

文字列を連結するには、使用、+ 文字。To concatenate a string, use the + character. 値、CaseSensitiveのプロパティ、DataSetクラスは、文字列比較は大文字小文字を区別するかどうかを決定します。The value of the CaseSensitive property of the DataSet class determines whether string comparisons are case-sensitive. ただし、その値を上書きできます、CaseSensitiveのプロパティ、DataTableクラス。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 のように ' * 製品*'""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.Priceという名前の親テーブルの列を参照してPriceします。For example, the Parent.Price references the parent table's column named Price.

子が 1 つ以上の親行を持っている場合は、Parent(RelationName) を使用します。ColumnName します。When a child has more than one parent row, use Parent(RelationName).ColumnName. たとえば、Parent(RelationName) です。価格は、リレーションシップを使用して価格をという名前の親テーブルの列を参照します。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.

構文は、テーブルの 1 つ以上の子の場合:Child(RelationName)します。If a table has more than one child, the syntax is: Child(RelationName). という名前の 2 つの子テーブルが存在する場合の例のCustomersOrders、および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)

集計Aggregates

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

Sum (Sum)Sum (Sum)

Avg (平均)Avg (Average)

Min (最小)Min (Minimum)

最大 (最大)Max (Maximum)

カウント (数)Count (Count)

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

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

集計は、通常、リレーションシップに沿って実行されます。Aggregates are ordinarily performed along relationships. 親/子リレーションシップ参照前述したとおりの 1 つ前に示した関数と子テーブルの列を使用して、集計式を作成します。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":

Sum(Price)Sum(Price)

注意

集計を作成する 1 つのテーブルを使用する場合がありますいない group by 機能。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.

関数Functions

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

CONVERT

説明Description 特定の式を指定した .NET Framework 型に変換します。Converts particular expression to a specified .NET Framework Type.
構文Syntax 変換 (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 (合計、'System.Int32')"Example: myDataColumn.Expression="Convert(total, 'System.Int32')"

すべての変換は、次の例外で有効ですBooleanを強制的に変換できるByteSByteInt16Int32Int64UInt16UInt32UInt64、 。Stringと自体のみです。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.

LEN

説明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)"

ISNULL

説明Description Checked 式または置換値を式とを返すかを確認します。Checks an expression and either returns the checked expression or a replacement value.
構文Syntax ISNULL(expression, replacementvalue)ISNULL(expression, replacementvalue)
引数Arguments expression --式を確認するには。expression -- The expression to check.

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

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

IIF

説明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、'コストの高い'、'dear')Example: myDataColumn.Expression = "IIF(total>1000, 'expensive', 'dear')

TRIM

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

SUBSTRING

説明Description 文字列で指定された位置から始まる指定された長さの部分文字列を取得します。Gets a sub-string of a specified length, starting at a specified point in the string.
構文Syntax 部分文字列 (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「部分文字列 (電話、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.

適用対象

こちらもご覧ください