Propriedade System.Data.DataColumn.Expression
Este artigo fornece observações complementares à documentação de referência para essa API.
Um uso da Expression propriedade é criar colunas calculadas. Por exemplo, para calcular um valor de imposto, o preço unitário é multiplicado por uma taxa de imposto de uma região específica. Como as alíquotas variam de região para região, seria impossível colocar uma única alíquota em uma coluna; em vez disso, o valor é calculado usando a Expression propriedade, conforme mostrado no código a seguir:
DataSet1.Tables("Products").Columns("tax").Expression = "UnitPrice * 0.086"
Um segundo uso é criar uma coluna agregada. Semelhante a um valor calculado, uma agregação executa uma operação com base no conjunto completo de linhas no DataTable. Um exemplo simples é contar o número de linhas retornadas no conjunto. Esse é o método que você usaria para contar o número de transações concluídas por um determinado vendedor, conforme mostrado no código a seguir:
DataSet1.Tables("Orders").Columns("OrderCount").Expression = "Count(OrderID)"
Sintaxe da expressão
Ao criar uma expressão, use a ColumnName propriedade para fazer referência a colunas. Por exemplo, se o ColumnName para uma coluna for "PreçoUnitário" e outra "Quantidade", a expressão será:
"UnitPrice * Quantity"
Observação
Se uma coluna é usada em uma expressão, então a expressão é dita ter uma dependência dessa coluna. Se uma coluna dependente for renomeada ou removida, nenhuma exceção será lançada. Uma exceção será lançada quando a coluna de expressão agora quebrada for acessada.
Ao criar uma expressão para um filtro, coloque cadeias de caracteres entre aspas simples:
"LastName = 'Jones'"
Se um nome de coluna contiver caracteres não alfanuméricos, começar com um dígito ou corresponder (sem distinção entre maiúsculas e minúsculas) a qualquer uma das seguintes palavras reservadas, ele exigirá um tratamento especial, conforme descrito nos parágrafos a seguir.
And
Between
Child
False
In
Is
Like
Not
Null
Or
Parent
True
Se um nome de coluna satisfizer uma das condições anteriores, ele deverá ser colocado entre colchetes ou aspas "'" (acento grave). Por exemplo, para usar uma coluna chamada "Column#" em uma expressão, você escreveria "[Column#]" ou "'Column#'":
Total * [Column#]
Se o nome da coluna estiver entre colchetes, todos os caracteres ']' e '\' (mas não quaisquer outros caracteres) nele devem ser escapados colocando-os com o caractere de barra invertida ("\"). Se o nome da coluna estiver entre caracteres de acento grave, ele não deve conter caracteres de acento grave. Por exemplo, uma coluna chamada "Column[]\" seria escrita:
Total * [Column[\]\\]
or
Total * 'Coluna[]\'
Valores definidos pelo usuário
Os valores definidos pelo usuário podem ser usados dentro de expressões a serem comparadas com valores de coluna. Os valores de cadeia de caracteres devem ser colocados entre aspas simples (e cada caractere de aspas simples em um valor de cadeia de caracteres deve ser escapado colocando-o com outro caractere de aspas simples). Os valores de data devem ser colocados entre sinais de libra (#) ou aspas simples (') com base no provedor de dados. Decimais e notação científica são permitidos para valores numéricos. Por exemplo:
"FirstName = 'John'"
"Price <= 50.00"
"Birthdate < #1/31/2006#"
Para colunas que contêm valores de enumeração, converta o valor em um tipo de dados inteiro. Por exemplo:
"EnumColumn = 5"
Analisar expressões literais
Todas as expressões literais devem ser expressas na localidade de cultura invariante. Quando DataSet
analisa e converte expressões literais, ele sempre usa a cultura invariante, não a cultura atual.
Os literais de cadeia de caracteres são identificados quando há aspas simples ao redor do valor. Por exemplo, 'John'
.
Boolean
literais são true
e false
não são citados em expressões.
Integer
literais [+-]? [0-9]+ são tratados como System.Int32
, System.Int64
ou System.Double
. System.Double
pode perder precisão dependendo do tamanho do número. Por exemplo, se o número no literal for 2147483650, DataSet
primeiro tentará analisar o número como um Int32
arquivo . Isso não terá sucesso porque o número é muito grande. Neste caso DataSet
, analisa o número como um Int64
, que terá sucesso. Se o literal for um número maior que o valor máximo de um Int64, DataSet
analisará o literal usando Double
.
Literais reais que usam notação científica, como 4.42372E-30, são analisados usando System.Double
.
Literais reais sem notação científica, mas com um ponto decimal, são tratados como System.Decimal
. Se o número exceder os valores máximos ou mínimos suportados pelo System.Decimal
, ele será analisado como um System.Double
arquivo . Por exemplo:
- 142526.144524 é convertido em um
Decimal
arquivo . - 345262.78036719560925667 é tratado como um
Double
arquivo .
Operadores
A concatenação é permitida usando operadores booleanos AND, OR e NOT. Você pode usar parênteses para agrupar cláusulas e forçar precedência. O operador AND tem precedência sobre outros operadores. Por exemplo:
(LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'
Quando você cria expressões de comparação, os seguintes operadores são permitidos:
- <
- >
- <=
- >=
- =
IN
LIKE
Os seguintes operadores aritméticos também são suportados em expressões:
- + (adição)
- - (subtração)
- * (multiplicação)
- / (divisão)
- % (módulo)
Operadores de cadeia de caracteres
Para concatenar uma cadeia de caracteres, use o +
caractere. O valor da CaseSensitive propriedade da classe determina se as DataSet comparações de cadeia de caracteres diferenciam maiúsculas de minúsculas. No entanto, você pode substituir esse valor com a CaseSensitive propriedade da DataTable classe.
Caracteres curinga
*
Os caracteres e %
podem ser usados alternadamente para caracteres curinga em uma comparação LIKE. Se a cadeia de caracteres em uma cláusula LIKE contiver um *
ou %
, esses caracteres deverão ser colocados entre colchetes ([]
). Se um colchete estiver na cláusula, cada caractere de colchete deverá ser colocado entre colchetes (por exemplo [[]
, ou []]
). Um curinga é permitido no início e no final de um padrão, ou no final de um padrão, ou no início de um padrão. Por exemplo:
"ItemName LIKE '*product*'"
"ItemName LIKE '*product'"
"ItemName LIKE 'product*'"
Caracteres curinga não são permitidos no meio de uma cadeia de caracteres. Por exemplo, 'te*xt'
não é permitido.
Referência da relação pais/filhos
Uma tabela pai pode ser referenciada em uma expressão precedendo o nome da coluna com Parent
. Por exemplo, Parent.Price
faz referência à coluna da tabela pai chamada Price
.
Quando uma criança tiver mais de uma linha pai, use Parent(RelationName).ColumnName
. Por exemplo, Parent(RelationName).Price
faz referência à coluna da tabela pai chamada "Preço" por meio da relação.
Uma coluna em uma tabela filho pode ser referenciada em uma expressão precedendo o nome da coluna com Child
. No entanto, como as relações filho podem retornar várias linhas, você deve incluir a referência à coluna filho em uma função agregada. Por exemplo, Sum(Child.Price)
retornaria a soma da coluna nomeada Price
na tabela filho.
Se uma tabela tiver mais de um filho, a sintaxe será: Child(RelationName)
. Por exemplo, se uma tabela tiver duas tabelas filhas nomeadas Customers
e Orders
, e o DataRelation objeto for nomeado Customers2Orders
, a referência será a seguinte:
Avg(Child(Customers2Orders).Quantity)
Agregações
Os seguintes tipos agregados são suportados:
Sum
(Soma)Avg
(Média)Min
(Mínimo)Max
(Máximo)Count
(Contagem)StDev
(Desvio padrão estatístico)Var
(Variância estatística)
Os agregados são normalmente realizados ao longo dos relacionamentos. Crie uma expressão agregada usando uma das funções listadas anteriormente e uma coluna de tabela filho, conforme detalhado em Referência de relação pai/filho. Por exemplo:
Avg(Child.Price)
Avg(Child(Orders2Details).Price)
Um agregado também pode ser realizado em uma única tabela. Por exemplo, para criar um resumo de figuras em uma coluna chamada "Preço":
Sum(Price)
Observação
Se você usar uma única tabela para criar uma agregação, não haverá funcionalidade de agrupar por. Em vez disso, todas as linhas exibiriam o mesmo valor na coluna.
Se uma tabela não tiver linhas, as funções agregadas retornarão null
.
Os tipos de dados sempre podem ser determinados examinando a DataType propriedade de uma coluna. Você também pode converter tipos de dados usando a função, mostrada Convert
na seção a seguir.
Uma agregação só pode ser aplicada a uma única coluna, e nenhuma outra expressão pode ser usada dentro da agregação.
Funções
As seguintes funções também são suportadas.
CONVERT
Essa função converte uma expressão em um tipo .NET especificado.
Convert(expression, type)
Argument | Descrição |
---|---|
expression |
A expressão a ser convertida. |
type |
Tipo .NET para o qual o valor será convertido. |
Exemplo: myDataColumn.Expression="Convert(total, 'System.Int32')"
Todas as conversões são válidas com as seguintes exceções: Boolean
podem ser coagidas de e para Byte
, SByte
, Int16
, , Int64
Int32
, , UInt16
, UInt32
, String
UInt64
e somente para si mesmas. Char
pode ser coagido de e para Int32
, UInt32
, String
, e somente para si mesmo. DateTime
só pode ser coagido de e para String
si mesmo. TimeSpan
só pode ser coagido de e para String
si mesmo.
LEN
Essa função obtém o comprimento de uma cadeia de caracteres.
LEN(expression)
Argumentos | Descrição |
---|---|
expression |
A cadeia de caracteres a ser avaliada. |
Exemplo: myDataColumn.Expression="Len(ItemName)"
ISNULL
Essa função verifica uma expressão e retorna a expressão verificada ou um valor de substituição.
ISNULL(expression, replacementvalue)
Argumentos | Descrição |
---|---|
expression |
A expressão a ser verificada. |
replacementvalue |
Se a expressão for null , replacementvalue será retornado. |
Exemplo: myDataColumn.Expression="IsNull(price, -1)"
IIF
Essa função obtém um dos dois valores, dependendo do resultado de uma expressão lógica.
IIF(expr, truepart, falsepart)
Argumentos | Descrição |
---|---|
expr |
A expressão a ser avaliada. |
truepart |
O valor a ser retornado se a expressão for true. |
falsepart |
O valor a ser retornado se a expressão for false. |
Exemplo: myDataColumn.Expression = "IIF(total>1000, 'expensive', 'dear')
TRIM
Essa função remove todos os caracteres em branco à esquerda e à direita, como \r, \n, \t e ' '.
TRIM(expression)
Argument | Descrição |
---|---|
expression |
A expressão para cortar. |
SUBSTRING
Essa função obtém uma substring de um comprimento especificado, começando em um ponto especificado na cadeia de caracteres.
SUBSTRING(expression, start, length)
Argument | Descrição |
---|---|
expression |
A cadeia de caracteres de origem para a subcadeia de caracteres |
start |
Inteiro que especifica onde a subcadeia de caracteres começa. |
length |
Inteiro que especifica o comprimento da subcadeia de caracteres. |
Exemplo: myDataColumn.Expression = "SUBSTRING(phone, 7, 8)"
Observação
Você pode redefinir a Expression propriedade atribuindo-lhe um valor nulo ou uma cadeia de caracteres vazia. Se um valor padrão for definido na coluna de expressão, todas as linhas preenchidas anteriormente receberão o valor padrão depois que a Expression propriedade for redefinida.