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 falsenão são citados em expressões.

Integer literais [+-]? [0-9]+ são tratados como System.Int32, System.Int64ou 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 Int32arquivo . 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.Doublearquivo . Por exemplo:

  • 142526.144524 é convertido em um Decimalarquivo .
  • 345262.78036719560925667 é tratado como um Doublearquivo .

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, , Int64Int32, , UInt16, UInt32, StringUInt64e 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.