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
Значение свойства
Выражение, используемое для расчета значений столбца либо создания составного столбца. Возвращаемый тип выражения определяется с помощью 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
, UInt16
Int32
UInt32
Int64
, 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 свойства.