Propriedade System.Data.DataColumn.Expression

Observação

Este artigo fornece observações complementares à documentação de referência para esta 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. Uma vez que as taxas de imposto variam de região para região, seria impossível colocar uma única taxa de imposto numa 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. Este é 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 a ColumnName de uma coluna for "PreçoUnitário" e de outra for "Quantidade", a expressão é:

"UnitPrice * Quantity"

Observação

Se uma coluna é usada em uma expressão, então a expressão é dita como tendo uma dependência dessa coluna. Se uma coluna dependente for renomeada ou removida, não é lançada nenhuma exceção. 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 o nome de uma 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, será necessário um tratamento especial, conforme descrito nos parágrafos seguintes.

And

Between

Child

False

In

Is

Like

Not

Null

Or

Parent

True

Se o nome de uma coluna satisfizer uma das condições anteriores, deve ser colocado entre parênteses retos ou entre aspas "'" (acento grave). Por exemplo, para usar uma coluna chamada "Coluna#" em uma expressão, você escreveria "[Coluna#]" ou "'Coluna#'":

Total * [Column#]

Se o nome da coluna estiver entre colchetes, então apenas os caracteres ']' e '\' nele devem ser escapados, prefixando-os com o caractere de barra invertida ("\"). Se o nome da coluna estiver entre caracteres de acento grave, não deve conter caracteres de acento grave. Por exemplo, uma coluna chamada "Column[]\" seria escrita:

Total * [Column[\]\\]

ou

Total * `Coluna[]\`

Valores definidos pelo usuário

Os valores definidos pelo usuário podem ser usados dentro de expressões para serem comparados com valores de coluna. Os valores de strings devem ser colocados entre aspas simples (e cada caractere de aspas simples em um valor de string deve ser escapado antecedendo-o com outro caractere de aspas simples). Os valores de data devem ser incluídos em sinais de libra (#) ou aspas simples (') com base no provedor de dados. São admissíveis decimais e notações científicas 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 da cultura invariante. Quando DataSet analisa e converte expressões literais, usa sempre a cultura invariante, não a cultura atual.

Os literais de cadeia de texto são identificados quando há aspas únicas à volta do valor. Por exemplo, 'John'.

Boolean literais são true e falsenã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 a precisão dependendo do tamanho do número. Por exemplo, se o número no literal for 2147483650, DataSet tentará primeiro interpretar o número como um Int32. Isso não terá sucesso porque o número é muito grande. Neste caso DataSet, interpreta o número como um Int64, com sucesso. Se o literal for um número maior do que o valor máximo de um Int64, DataSet analisa 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. Por exemplo:

  • 142526.144524 é convertido em um Decimal.
  • 345262.78036719560925667 é tratado como um Double.

Operadores

A concatenação é permitida usando os operadores booleanos E, OU e NÃO. 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 strings

Para concatenar uma cadeia de caracteres, use o + caractere. O valor da propriedade `CaseSensitive` da classe `DataSet` determina se as comparações de cadeias de caracteres diferenciam maiúsculas de minúsculas. No entanto, você pode substituir esse valor com a CaseSensitive propriedade da DataTable classe.

Caracteres curinga

Ambos os caracteres * e % podem ser usados de forma intercambiável como caracteres curinga numa 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 houver um parêntesis na cláusula, cada caractere entre parênteses deve ser colocado entre parênteses (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 pai/filho

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 principal, use Parent(RelationName).ColumnName. Por exemplo, Parent(RelationName).Price faz referência à coluna da tabela pai chamada "Preço" através da relação.

Uma coluna numa tabela filha pode ser referenciada numa expressão antepondo o nome da coluna com Child. No entanto, como as relações secundárias podem retornar várias linhas, deve incluir a referência à coluna secundária em uma função agregada. Por exemplo, Sum(Child.Price) retornaria a soma da coluna nomeada Price na tabela filha.

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)

Agregados

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)

Agregações são normalmente realizadas em associação com as relações. 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 números em uma coluna chamada "Preço":

Sum(Price)

Observação

Se utilizar uma única tabela para criar uma agregação, não haverá funcionalidade de agrupamento. 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

Esta função converte uma expressão em um tipo .NET especificado.

Convert(expression, type)
Argumento Descrição
expression A expressão a converter.
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, Int32, Int64, UInt16, UInt32, UInt64, String e somente a si próprio. Char pode ser convertido de e para Int32, UInt32, String, e somente para si mesmo. DateTime pode ser convertido para e a partir de String, e apenas para si próprio. TimeSpan pode ser convertido para e a partir de String, e apenas para si próprio.

LEN

Esta 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

Esta 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 verificar.
replacementvalue Se a expressão é null, replacementvalue é retornada.

Exemplo: myDataColumn.Expression="IsNull(price, -1)"

IIF

Esta função obtém um de dois valores dependendo do resultado de uma expressão lógica.

IIF(expr, truepart, falsepart)
Argumentos Descrição
expr A expressão a avaliar.
truepart O valor a ser devolvido se a expressão for verdadeira.
falsepart O valor a ser devolvido se a expressão for falsa.

Exemplo: myDataColumn.Expression = "IIF(total>1000, 'expensive', 'dear')

TRIM

Esta função remove todos os caracteres em branco à esquerda e à direita, como \r, \n, \t e ' '.

TRIM(expression)
Argumento Descrição
expression A expressão para cortar.

SUBSTRING

Esta função obtém uma substring de um comprimento especificado, começando em um ponto especificado na string.

SUBSTRING(expression, start, length)
Argumento Descrição
expression A cadeia de caracteres de origem para a substring
start Inteiro que especifica onde a substring começa.
length Inteiro que especifica o comprimento da substring.

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.