Свойство 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
и Orders
DataRelation объект называется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
, UInt32
Int32
String
Int16
Int64
UInt16
UInt64
и только сам. Char
может быть принучен к и от Int32
, UInt32
String
и только сам по себе. 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 свойства.