Поделиться через


Свойство System.Data.DataColumn.Expression

В этой статье приводятся дополнительные замечания к справочной документации по этому API.

Одним из способов Expression использования свойства является создание вычисляемых столбцов. Например, для вычисления налоговой стоимости цена единицы умножается на ставку налога определенного региона. Поскольку налоговые ставки варьируются от региона к региону, было бы невозможно поместить единую налоговую ставку в столбец; Вместо этого значение вычисляется с помощью Expression свойства, как показано в следующем коде:

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

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

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

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

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

"UnitPrice * Quantity"

Примечание.

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

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

"LastName = 'Jones'"

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

And

Between

Child

False

In

Is

Like

Not

Null

Or

Parent

True

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

Total * [Column#]

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

Total * [Column[\]\\]

or

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

Определяемые пользователем значения

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

"FirstName = 'John'"

"Price <= 50.00"

"Birthdate < #1/31/2006#"

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

"EnumColumn = 5"

Анализ литеральных выражений

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

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

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 класса определяет, учитывается ли сравнение строк регистра. Однако можно переопределить это значение свойством CaseSensitive DataTable класса.

Дикие карта символы

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

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

Wild карта символы не допускаются в середине строки. Например, выражение 'te*xt' недопустимо.

Ссылка на отношение "Родитель-дочерний"

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

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

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

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

Avg(Child(Customers2Orders).Quantity)

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

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

  • Sum (Sum)
  • Avg (Среднее)
  • Min (минимум)
  • Max (максимум)
  • Count (Число)
  • StDev (Статистическое стандартное отклонение)
  • Var (Статистические дисперсии)

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

  • Avg(Child.Price)
  • Avg(Child(Orders2Details).Price)

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

Sum(Price)

Примечание.

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

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

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

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

Функции

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

CONVERT

Эта функция преобразует выражение в указанный тип .NET.

Convert(expression, type)
Аргумент Description
expression Преобразуемое выражение .
type Тип .NET, в который будет преобразовано значение.

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

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

LEN

Эта функция получает длину строки.

LEN(expression)
Аргументы Description
expression Вычисляемая строка.

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

ISNULL

Эта функция проверка выражение и возвращает проверка проверка или значение замены.

ISNULL(expression, replacementvalue)
Аргументы Description
expression Выражение для проверка.
replacementvalue Если выражение равно null, replacementvalue возвращается.

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

IIF

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

IIF(expr, truepart, falsepart)
Аргументы Description
expr Выражение для вычисления.
truepart Значение, возвращаемое, если выражение имеет значение true.
falsepart Значение, возвращаемое, если выражение равно false.

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

TRIM

Эта функция удаляет все начальные и конечные пустые символы, такие как \r, \n, \t и '.

TRIM(expression)
Аргумент Description
expression Выражение для обрезки.

SUBSTRING

Эта функция получает подстроку указанной длины, начиная с указанной точки в строке.

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

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

Примечание.

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