DataColumn.Expression Свойство

Определение

Возвращает или задает выражение, используемое для фильтрации строк, расчета значений в столбце либо для создания составного столбца.

public:
 property System::String ^ Expression { System::String ^ get(); void set(System::String ^ value); };
public string Expression { get; set; }
[System.Data.DataSysDescription("DataColumnExpressionDescr")]
public string Expression { get; set; }
member this.Expression : string with get, set
[<System.Data.DataSysDescription("DataColumnExpressionDescr")>]
member this.Expression : string with get, set
Public Property Expression As String

Значение свойства

String

Выражение, используемое для расчета значений столбца либо создания составного столбца. Возвращаемый тип выражения определяется с помощью DataType столбца.

Атрибуты

Исключения

Свойству AutoIncrement или Unique задано значение true.

При использовании функции CONVERT выражение оценивает строку, но строка не содержит представление, которое может быть преобразовано в параметр типа.

При использовании функции CONVERT запрошенное приведение типов невозможно. Подробные сведения о возможном приведении см. в описании функции преобразования, приведенном в следующем разделе.

При использовании функции SUBSTRING аргумент начала находится вне диапазона.

-Или-

При использовании функции SUBSTRING аргумент длины находится вне диапазона.

При использовании функции LEN или TRIM выражение не выполняет вычисление строки. Это включает выражения, которое выполняет вычисление Char.

Примеры

В следующем примере создаются три столбца DataTableв . Второй и третий столбцы содержат выражения; второй вычисляет налог с использованием переменной налоговой ставки, а третий добавляет результат вычисления к значению первого столбца. Результирующая таблица отображается в элементе DataGrid управления .

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 использования свойства является создание вычисляемых столбцов. Например, чтобы вычислить налоговую стоимость, цена за единицу умножается на налоговую ставку в определенном регионе. Так как налоговые ставки различаются в разных регионах, нельзя было бы поставить единую налоговую ставку в столбец; Вместо этого значение вычисляется с помощью Expression свойства , как показано в коде Visual Basic в следующем разделе:

DataSet1.Tables("Products"). Columns("tax"). Expression = "UnitPrice * 0,086"

Второе использование — создание агрегатного столбца. Как и вычисляемое значение, агрегат выполняет операцию на основе полного набора строк в DataTable. Простой пример — подсчет количества строк, возвращаемых в наборе. Это метод, который вы используете для подсчета количества транзакций, выполненных определенным продавцом, как показано в следующем коде Visual Basic:

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

Синтаксис выражений

При создании выражения используйте свойство для ColumnName ссылки на столбцы. Например, если ColumnName для одного столбца задано значение UnitPrice, а для другого — Quantity, выражение будет следующим:

"UnitPrice * Quantity"

Примечание

Если столбец используется в выражении, считается, что выражение имеет зависимость от этого столбца. Если зависимый столбец переименовывается или удаляется, исключение не создается. При обращении к столбцу выражений, в настоящее время неработающее, будет создано исключение.

При создании выражения для фильтра заключите строки в одинарные кавычки:

"LastName = 'Jones'"

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

And

С

Дочерний

Неверно

В

Is

Похоже

Not

NULL

Или

Parent

Верно

Если имя столбца удовлетворяет одному из указанных выше условий, его необходимо заключить либо в квадратные скобки, либо в кавычки "'" (серьезный акцент). Например, чтобы использовать столбец с именем "Column#" в выражении, необходимо написать "[Столбец#]":

Всего * [Столбец#]

или "'Column#'":

Итог * 'Столбец#'

Если имя столбца заключено в квадратные скобки, все символы "]" и "\" (но не любые другие символы) в нем должны быть экранированы путем добавления к ним символа обратной косой черты ("\"). Если имя столбца заключено в знаки серьезной диакритических знаков, то в нем не должно содержаться серьезных диакритических знаков. Например, будет записан столбец с именем Column[]\:

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

или

Всего * 'Столбец[]\'

Значения User-Defined

Определяемые пользователем значения можно использовать в выражениях для сравнения со значениями столбцов. Строковые значения должны быть заключены в одинарные кавычки (и каждый символ кавычки в строковом значении должен быть экранирован путем добавления в начало другого символа кавычки). Значения даты должны быть заключены в знаки фунта (#) или одинарные кавычки (') на основе поставщика данных. Десятичные и научные нотации допустимы для числовых значений. Пример:

"FirstName = 'John'"

"Цена <= 50,00"

"Дата рождения < #31.1.82#"

Для столбцов, содержащих значения перечисления, приведите значение к целочисленным типам данных. Пример:

"EnumColumn = 5"

Синтаксический анализ литеральных выражений

Все литеральные выражения должны быть выражены в инвариантном языковом стандарте языка и региональных параметров. При DataSet анализе и преобразовании литеральных выражений всегда используется инвариантный язык и региональные параметры, а не текущий язык и региональные параметры.

Строковые литералы определяются при наличии одинарных кавычек, окружающих значение. Пример:

"Джон"

Boolean Литералы имеют значение true и false; Они не заключены в кавычки в выражениях.

Integer литералы [+-]? [0–9]+ обрабатываются как System.Int32, System.Int64 или System.Double. System.Double может потерять точность в зависимости от того, насколько велико число. Например, если число в литерале 2147483650, DataSet сначала попытается проанализировать число как .Int32 Это не удастся, так как число слишком велико. В этом случае DataSet будет анализировать число как Int64, что приведет к успешному выполнению. Если литерал был числом, превышающим максимальное значение Int64, DataSet будет анализировать литерал с помощью Double.

Реальные литералы с использованием научной нотации, например 4.42372E-30, анализируются с помощью System.Double.

Реальные литералы без научной нотации, но с десятичной запятой, обрабатываются как System.Decimal. Если число превышает максимальное или минимальное значение, поддерживаемое System.Decimal, оно анализируется как System.Double. Пример:

142526.144524 будет преобразовано в Decimal.

345262.78036719560925667 будет рассматриваться как Double.

Операторы

Объединение допускается с помощью логических операторов AND, OR и NOT. Круглые скобки можно использовать для группировки предложений и принудительного приоритета. Оператор AND имеет приоритет над другими операторами. Пример:

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

При создании выражений сравнения допускаются следующие операторы:

<

>

<=

>=

<>

=

IN

LIKE

В выражениях также поддерживаются следующие арифметические операторы:

+ (сложение)

- (вычитание)

* (умножение)

/ (деление)

% (модуль)

Строковые операторы

Чтобы сцепить строку, используйте символ +. Значение CaseSensitive свойства DataSet класса определяет, учитывается ли регистр при сравнении строк. Однако это значение можно переопределить свойством CaseSensitiveDataTable класса .

Подстановочные знаки

Символы * и % могут использоваться взаимозаменяемо для подстановочных знаков в сравнении LIKE. Если строка в предложении LIKE содержит * или %, эти символы должны быть заключены в квадратные скобки ([]). Если в предложении есть скобка, каждый символ квадратных скобок должен быть заключен в квадратные скобки (например, [[] или []]). Подстановочный знак допускается в начале и конце шаблона, в конце шаблона или в начале шаблона. Пример:

"ItemName LIKE '*product*'"

"ItemName LIKE '*product'"

"ItemName LIKE 'product*'"

Подстановочные знаки не допускаются в середине строки. Например, "te*xt" запрещено.

Ссылка на отношение "родитель-потомок"

На родительскую таблицу можно ссылаться в выражении, добавляя имя Parentстолбца к . Например, ссылается Parent.Price на столбец родительской таблицы с именем Price.

Если дочерний элемент имеет несколько родительских строк, используйте parent(RelationName). ColumnName. Например, Parent(RelationName). Price ссылается на столбец родительской таблицы с именем Price через отношение .

На столбец в дочерней таблице можно ссылаться в выражении, добавляя имя Childстолбца к . Однако, поскольку дочерние связи могут возвращать несколько строк, необходимо включить ссылку на дочерний столбец в агрегатную функцию. Например, Sum(Child.Price) возвращает сумму столбца с именем Price в дочерней таблице.

Если таблица имеет несколько дочерних элементов, используется следующий синтаксис: Child(RelationName). Например, если в таблице есть две дочерние таблицы с именами Customers и Orders, а DataRelation объект имеет имя Customers2Orders, ссылка будет выследовать следующим образом:

Avg(Child(Customers2Orders). Количество)

Статистические выражения

Поддерживаются следующие статистические типы:

Sum (Sum)

Среднее (среднее)

Минимум (минимум)

Максимум (максимум)

Количество (число)

StDev (статистическое стандартное отклонение)

Var (статистическая дисперсия).

Статистические выражения обычно выполняются вместе с связями. Создайте статистическое выражение с помощью одной из перечисленных ранее функций и столбца дочерней таблицы, как описано ранее в разделе Ссылка на родительское и дочернее отношение. Пример:

Avg(Child.Price)

Avg(Child(Orders2Details). Цена)

Статистическая обработка также может выполняться для одной таблицы. Например, чтобы создать сводку по цифрам в столбце "Цена", выполните указанные ниже действия.

Sum(Price)

Примечание

Если для создания статистического выражения используется одна таблица, функция группирования не будет. Вместо этого во всех строках будет отображаться одно и то же значение в столбце.

Если в таблице нет строк, агрегатные функции возвращают null.

Типы данных всегда можно определить путем DataType проверки свойства столбца. Вы также можете преобразовать типы данных с помощью функции Convert, как показано в следующем разделе.

Агрегат может применяться только к одному столбцу, и никакие другие выражения не могут использоваться внутри статистического выражения.

Функции

Также поддерживаются следующие функции:

CONVERT

Описание Преобразует конкретное выражение в указанный тип платформа .NET Framework.
Синтаксис Convert(expression, type)
Аргументы expression - Выражение для преобразования.

type тип -- .NET, в который будет преобразовано значение.

Пример: myDataColumn.Expression="Convert(total, 'System.Int32')"

Все преобразования допустимы со следующими исключениями: Boolean могут быть принундированы только к , SByte, , Int16, UInt16Int32UInt32Int64, UInt64и String только к Byteсамому себе. Charможет быть принундирован только к , UInt32, String, и только к самому Int32себе. DateTime может быть принужден только к и из String и сам по себе. TimeSpan может быть принужден только к и из String и сам по себе.

LEN

Описание Возвращает длину строки.
Синтаксис LEN(expression)
Аргументы expression -- Строка для вычисления.

Пример: myDataColumn.Expression="Len(ItemName)"

ISNULL

Описание Проверяет выражение и возвращает проверенное выражение или замещающее значение.
Синтаксис ISNULL(expression, replacementvalue)
Аргументы expression - Выражение для проверки.

replacementvalue -- Если выражение имеет значение null, replacementvalue возвращается .

Пример: myDataColumn.Expression="IsNull(price, -1)"

IIF

Описание Возвращает одно из двух значений в зависимости от результата логического выражения.
Синтаксис IIF(expr, truepart, falsepart)
Аргументы expr - Выражение для вычисления.

truepart -- Значение, возвращаемое, если выражение имеет значение true.

falsepart -- Значение, возвращаемое, если выражение имеет значение false.

Пример: myDataColumn.Expression = "IIF(total>1000, 'expensive', 'dear')

TRIM

Описание Удаляет все начальные и конечные пустые символы, такие как \r, \n, \t, ' '
Синтаксис TRIM(expression)
Аргументы expression -- Выражение для обрезки.

SUBSTRING

Описание Возвращает вложенную строку указанной длины, начиная с указанной точки в строке.
Синтаксис SUBSTRING(expression, start, length)
Аргументы expression -- Исходная строка для подстроки.

start -- Целое число, указывающее, где начинается подстрока.

length -- Целое число, указывающее длину подстроки.

Пример: myDataColumn.Expression = "SUBSTRING(phone, 7, 8)"

Примечание

Свойство можно сбросить, Expression назначив ему значение NULL или пустую строку. Если для столбца expression задано значение по умолчанию, всем ранее заполненным строкам присваивается значение по умолчанию после сброса Expression свойства.

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

См. также раздел