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.

Примеры

В следующем примере создается три столбца в DataTable.The following example creates three columns in a DataTable. Второй и третий столбцы содержат выражения. второй вычисляет налог с использованием переменной ставки налога и третий добавляет результат вычисления к значению первого столбца.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

Комментарии

Один из способов использования 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"

Второй используется для создания составного столбца.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 для одного столбца, «Цена» и другой «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.

иAnd

МеждуBetween

ДочернийChild

FalseFalse

УвеличениеIn

ЯвляетсяIs

Как иLike

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. К примеру Чтобы использовать столбец с именем «Столбец #» в выражении, вы пишете либо «[Column #]»: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="b5f02-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'"

«Цена < = 50,00»"Price <= 50.00"

«Дата рождения < # #1/31/82»"Birthdate < #1/31/82#"

Для столбцов, содержащих значений перечисления приведите значение к типу данных integer.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.Int32, System.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, 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 = «Джон»(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 LIKE '*product*'"

«Имя элемента как "* продукта"»"ItemName LIKE '*product'"

«Имя элемента как «продукта *»»"ItemName LIKE 'product*'"

Подстановочные знаки не допускаются в середине строки.Wildcard characters are not allowed in the middle of a string. Например "te * произвольное тестирование" не допускается.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.

Если дочерний элемент имеет более одной родительской строки, используйте Parent(RelationName). ColumnName.When a child has more than one parent row, use Parent(RelationName).ColumnName. Например Parent(RelationName). Цена ссылается на столбец в родительской таблице с именем 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). Например, если таблица имеет два дочерних таблиц с именем Customers и Ordersи 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 (Average)

Min (минимум)Min (Minimum)

Max (максимум)Max (Maximum)

Count (количество)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)

Статистическое выражение может также выполняться для одной таблицы.An aggregate can also be performed on a single table. Например для суммирования значений в столбце с именем «Цена по»:For example, to create a summary of figures in a column named "Price":

Sum(Price)Sum(Price)

Примечание

Если вы используете одну таблицу для создания статистического выражения, будет не Группировка.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.

Статистическое выражение может применяться только к одному столбцу, и никакие другие выражения может использоваться внутри агрегатной функции.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 Преобразование (expression, type)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.

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

Все преобразования допустимы со следующими исключениями: Boolean может быть преобразован в / из Byte, SByte, Int16, Int32, Int64, UInt16, UInt32, UInt64, 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 может быть преобразован в / из Int32, UInt32, Stringи только для себя.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 Проверяет выражение и либо возвращает проверенное выражение или значение замены.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 — Если выражение равно null, replacementvalue возвращается.replacementvalue -- If expression is null, replacementvalue is returned.

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

IIF

ОписаниеDescription Возвращает одно из двух значений в зависимости от результата логического выражения.Gets one of two values depending on the result of a logical expression.
СинтаксисSyntax IIF(expr, truepart, falsepart)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.

Example: myDataColumn.Expression = "IIF(total>1000, 'expensive', '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 TRIM(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 SUBSTRING (expression, start, length)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.

Применяется к

Дополнительно