DataColumn.Expression Свойство

Определение

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

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

BetweenBetween

ДочернийChild

FalseFalse

УвеличениеIn

ЯвляетсяIs

LikeLike

notNot

NullNull

ИлиOr

РодительскийParent

ДаTrue

Если имя столбца удовлетворяет одному из указанных выше условий, оно должно быть заключено в квадратные скобки или в кавычки «» (ударение).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#]

или "`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. Например, будет записан столбец с именем Column []\:For example, a column named "Column[]\" would be written:

Всего * [столбец [\]\\]Total * [Column[\]\\]

илиor

Всего * `столбец []\</span><span class="sxs-lookup"><span data-stu-id="efdcf-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#"

Для столбцов, содержащих значения перечисления, приведите значение к типу данных Integer.For columns that contain enumeration values, cast the value to an integer data type. Например:For example:

"Енумколумн = 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'

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 будет анализировать литерал с помощью. DoubleIf 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.

Операторы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 = ' Иванов ' или 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, например" * продукт """ItemName LIKE '*product'"

"ItemName, например" продукт * ""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.

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

Агрегатные выраженияAggregates

Поддерживаются следующие типы агрегирования:The following aggregate types are supported:

Sum (сумма)Sum (Sum)

СР (среднее значение)Avg (Average)

Min (минимум)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 (дочерний. Price)Avg(Child.Price)

AVG (дочерний элемент (Orders2Details). ПозицииAvg(Child(Orders2Details).Price)

Статистическое выражение также может быть выполнено для одной таблицы.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)

Примечание

Если для создания статистической функции используется одна таблица, то функция 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.

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

Пример: Мидатаколумн. Expression = "преобразование (итог," 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может быть приведен только к самому и Int32FROM 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.

Пример: Мидатаколумн. 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.

Пример: Мидатаколумн. 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.

Пример: Мидатаколумн. Expression = "IIF (всего > 1000," дорогой "," Уважаемый ")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 ПОДСТРОКА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.

Пример: Мидатаколумн. 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.

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

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