DataColumn.Expression DataColumn.Expression DataColumn.Expression DataColumn.Expression Property

Definição

Obtém ou define a expressão usada para filtrar linhas, calcular os valores em uma coluna ou criar uma coluna de agregação.Gets or sets the expression used to filter rows, calculate the values in a column, or create an aggregate column.

public:
 property System::String ^ Expression { System::String ^ get(); void set(System::String ^ value); };
[System.Data.DataSysDescription("DataColumnExpressionDescr")]
public string Expression { get; set; }
member this.Expression : string with get, set
Public Property Expression As String

Valor da propriedade

Uma expressão para calcular o valor de uma coluna, ou criar uma coluna agregada.An expression to calculate the value of a column, or create an aggregate column. O tipo de retorno de uma expressão é determinado pelo DataType da coluna.The return type of an expression is determined by the DataType of the column.

Exceções

A propriedade AutoIncrement ou Unique é definida como true.The AutoIncrement or Unique property is set to true.

Quando você usa a função CONVERT, a expressão é avaliada como uma cadeia de caracteres, mas a cadeia de caracteres não contém uma representação que pode ser convertida para o parâmetro de tipo.When you are using the CONVERT function, the expression evaluates to a string, but the string does not contain a representation that can be converted to the type parameter.

Quando você usa a função CONVERT, a conversão solicitada não é possível.When you are using the CONVERT function, the requested cast is not possible. Consulte a função Conversão na seção a seguir para obter informações detalhadas sobre as possíveis conversões.See the Conversion function in the following section for detailed information about possible casts.

Quando você usa a função SUBSTRING, o argumento de início está fora do intervalo.When you use the SUBSTRING function, the start argument is out of range.

-Ou--Or- Quando você usa a função SUBSTRING, o argumento de tamanho está fora do intervalo.When you use the SUBSTRING function, the length argument is out of range.

Quando você usa a função LEN ou TRIM, a expressão não é avaliada como uma cadeia de caracteres.When you use the LEN function or the TRIM function, the expression does not evaluate to a string. Isso inclui as expressões avaliadas como Char.This includes expressions that evaluate to Char.

Exemplos

O exemplo a seguir cria três colunas em DataTableum.The following example creates three columns in a DataTable. A segunda e a terceira colunas contêm expressões; o segundo calcula o imposto usando uma taxa de imposto variável e o terceiro adiciona o resultado do cálculo ao valor da primeira coluna.The second and third columns contain expressions; the second calculates tax using a variable tax rate, and the third adds the result of the calculation to the value of the first column. A tabela resultante é exibida em um DataGrid controle.The resulting table is displayed in a DataGrid control.

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 DataTable = New DataTable 
 
     ' Create the first column.
     Dim priceColumn As DataColumn = New DataColumn
     With priceColumn
         .DataType = System.Type.GetType("System.Decimal")
         .ColumnName = "price"
         .DefaultValue = 50
     End With
     
     ' Create the second, calculated, column.
     Dim taxColumn As DataColumn = New DataColumn
     With taxColumn
         .DataType = System.Type.GetType("System.Decimal")
         .ColumnName = "tax"
         .Expression = "price * 0.0862"
     End With
     
    ' Create third column
     Dim totalColumn As DataColumn = 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

Comentários

Um uso da Expression propriedade é criar colunas calculadas.One use of the Expression property is to create calculated columns. 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.For example, to calculate a tax value, the unit price is multiplied by a tax rate of a specific region. Como as taxas de imposto variam de região para região, seria impossível colocar uma taxa de imposto único em uma coluna; em vez disso, o valor é calculado Expression usando a propriedade, conforme mostrado no código de Visual Basic na seção a seguir:Because tax rates vary from region to region, it would be impossible to put a single tax rate in a column; instead, the value is calculated using the Expression property, as shown in the Visual Basic code in the following section:

DataSet1.Tables("Products").Columns("tax").Expression = "UnitPrice * 0.086"DataSet1.Tables("Products").Columns("tax").Expression = "UnitPrice * 0.086"

Um segundo uso é criar uma coluna de agregação.A second use is to create an aggregate column. Semelhante a um valor calculado, uma agregação executa uma operação com base no conjunto completo de linhas no DataTable.Similar to a calculated value, an aggregate performs an operation based on the complete set of rows in the DataTable. Um exemplo simples é contar o número de linhas retornadas no conjunto.A simple example is to count the number of rows returned in the set. Esse é o método que você usaria para contar o número de transações concluídas por um vendedor específico, conforme mostrado neste Visual Basic código:This is the method you would use to count the number of transactions completed by a particular salesperson, as shown in this Visual Basic code:

DataSet1.Tables("Orders").Columns("OrderCount").Expression = "Count(OrderID)"  

Sintaxe de expressãoExpression Syntax

Quando você cria uma expressão, use a ColumnName propriedade para se referir a colunas.When you create an expression, use the ColumnName property to refer to columns. Por exemplo, se ColumnName for uma coluna for "PreçoUnitário" e outra "quantidade", a expressão seria a seguinte:For example, if the ColumnName for one column is "UnitPrice", and another "Quantity", the expression would be as follows:

"UnitPrice * Quantity""UnitPrice * Quantity"

Observação

Se uma coluna for usada em uma expressão, a expressão será considerada como tendo uma dependência nessa coluna.If a column is used in an expression, then the expression is said to have a dependency on that column. Se uma coluna dependente for renomeada ou removida, nenhuma exceção será lançada.If a dependent column is renamed or removed, no exception is thrown. Uma exceção será lançada quando a coluna de expressão agora quebrada for acessada.An exception will be thrown when the now-broken expression column is accessed.

Quando você cria uma expressão para um filtro, coloque cadeias de caracteres com aspas simples:When you create an expression for a filter, enclose strings with single quotation marks:

"LastName = 'Jones'""LastName = 'Jones'"

Se um nome de coluna contiver caracteres não alfanuméricos ou começar com um dígito ou correspondências (sem diferenciação de maiúsculas e minúsculas) qualquer uma das palavras reservadas a seguir, ele exigirá tratamento especial, conforme descrito nos parágrafos a seguir.If a column name contains any non-alphanumeric characters or starts with a digit or matches (case-insensitively) any of the following reserved words, it requires special handling, as described in the following paragraphs.

eAnd

EntreBetween

FilhoChild

FalseFalse

NoIn

ÉIs

LikeLike

nãoNot

NuloNull

OuOr

PaiParent

verdadeiroTrue

Se um nome de coluna satisfizer uma das condições acima, ele deverá ser disposto entre colchetes ou aspas de "'" (acento grave).If a column name satisfies one of the above conditions, it must be wrapped in either square brackets or the "`" (grave accent) quotes. Por exemplo, para usar uma coluna denominada "Column #" em uma expressão, você escreveria "[Column #]":For example, to use a column named "Column#" in an expression, you would write either "[Column#]":

Total * [coluna #]Total * [Column#]

ou "`coluna #" ":or "`Column#`":

Total * `coluna # 'Total * `Column#`

Se o nome da coluna estiver entre colchetes, todos os caracteres '] ' e\' ' (mas não quaisquer outros caracteres) deverão ser ignorados, predependendo-os com o caractere de barra\invertida ("").If the column name is enclosed in square brackets then any ']' and '\' characters (but not any other characters) in it must be escaped by prepending them with the backslash ("\") character. Se o nome da coluna estiver entre caracteres de acento grave, ele não deverá conter caracteres de acento grave nele.If the column name is enclosed in grave accent characters then it must not contain any grave accent characters in it. Por exemplo, uma coluna denominada "Column [\]" seria gravada:For example, a column named "Column[]\" would be written:

Total * [coluna [\]\\]Total * [Column[\]\\]

ouor

Total * `Column[]\</span><span class="sxs-lookup"><span data-stu-id="e77f1-310">Total \* \Column[]\`

Valores definidos pelo usuárioUser-Defined Values

Valores definidos pelo usuário podem ser usados em expressões para serem comparados com valores de coluna.User-defined values may be used within expressions to be compared with column values. 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 ter um escape precedido com outro caractere de aspa simples).String values should be enclosed within single quotation marks (and each single quotation character in a string value has to be escaped by prepending it with another single quotation character). Os valores de data devem ser colocados entre sinais de sustenido (#) ou aspas simples (') com base no provedor de dados.Date values should be enclosed within pound signs (#) or single quotes (') based on the data provider. Decimais e notação científica são permitidos para valores numéricos.Decimals and scientific notation are permissible for numeric values. Por exemplo:For example:

"FirstName = 'John'""FirstName = 'John'"

"Preço < = 50, 0""Price <= 50.00"

"DataDeNascimento < #1/31/82 #""Birthdate < #1/31/82#"

Para colunas que contêm valores de enumeração, converta o valor em um tipo de dados Integer.For columns that contain enumeration values, cast the value to an integer data type. Por exemplo:For example:

"EnumColumn = 5""EnumColumn = 5"

Analisando expressões literaisParsing Literal Expressions

Todas as expressões literais devem ser expressas na localidade de cultura invariável.All literal expressions must be expressed in the invariant culture locale. Quando DataSet o analisa e converte expressões literais, ele sempre usa a cultura invariável, não a cultura atual.When DataSet parses and converts literal expressions, it always uses the invariant culture, not the current culture.

Literais de cadeia de caracteres são identificados quando há aspas simples ao redor do valor.String literals are identified when there are single quotes surrounding the value. Por exemplo:For example:

João'John'

Booleanliterais são true e false; Elas não são entre aspas em expressões.Boolean literals are true and false; they are not quoted in expressions.

Integerliterais [+-]? [0-9] + são tratados como System.Int32, System.Int64 ou System.Double.Integer literals [+-]?[0-9]+ are treated as System.Int32, System.Int64 or System.Double. System.Doublepode perder a precisão dependendo do tamanho do número.System.Double can lose precision depending on how large the number is. Por exemplo, se o número no literal for 2147483650, DataSet o primeiro tentará analisar o número como um. Int32For example, if the number in the literal is 2147483650, DataSet will first attempt to parse the number as an Int32. Isso não terá sucesso porque o número é muito grande.This will not succeed because the number is too large. Nesse caso DataSet , o irá analisar o número como Int64um, que terá sucesso.In this case DataSet will parse the number as an Int64, which will succeed. Se o literal for um número maior que o valor máximo de um Int64, DataSet o analisará o literal Doubleusando.If the literal was a number larger than the maximum value of an Int64, DataSet will parse the literal using Double.

Os literais reais que usam notação científica, como 4.42372 E-30, são analisados usando System.Double.Real literals using scientific notation, such as 4.42372E-30, are parsed using System.Double.

Os literais reais sem notação científica, mas com um ponto decimal, são System.Decimaltratados como.Real literals without scientific notation, but with a decimal point, are treated as System.Decimal. Se o número exceder os valores máximo ou mínimo com System.Decimalsuporte no, ele será analisado como System.Doubleum.If the number exceeds the maximum or minimum values supported by System.Decimal, then it is parsed as a System.Double. Por exemplo:For example:

142526,144524 será convertido em um Decimal.142526.144524 will be converted to a Decimal.

345262.78036719560925667 será tratado como um Double.345262.78036719560925667 will be treated as a Double.

OperadoresOperators

A concatenação é permitida usando os operadores booliano AND, OR e NOT.Concatenation is allowed using Boolean AND, OR, and NOT operators. Você pode usar parênteses para agrupar cláusulas e forçar precedência.You can use parentheses to group clauses and force precedence. O operador AND tem precedência sobre outros operadores.The AND operator has precedence over other operators. Por exemplo:For example:

(LastName = ' Smith ' ou LastName = ' Jones ') E FirstName = ' João '(LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'

Quando você cria expressões de comparação, os seguintes operadores são permitidos:When you create comparison expressions, the following operators are allowed:

<

>

<=

>=

<>

=

ININ

LIKELIKE

Os operadores aritméticos a seguir também têm suporte em expressões:The following arithmetic operators are also supported in expressions:

+Além+ (addition)

- (subtração)- (subtraction)

*multiplicação* (multiplication)

/(divisão)/ (division)

% (módulo)% (modulus)

Operadores da cadeia de caracteresString Operators

Para concatenar uma cadeia de caracteres, use o caractere +.To concatenate a string, use the + character. O valor da CaseSensitive propriedade DataSet da classe determina se as comparações de cadeia de caracteres diferenciam maiúsculas de minúsculas.The value of the CaseSensitive property of the DataSet class determines whether string comparisons are case-sensitive. No entanto, você pode substituir esse valor CaseSensitive pela propriedade DataTable da classe.However, you can override that value with the CaseSensitive property of the DataTable class.

Caracteres curingaWildcard Characters

Os * e% podem ser usados de maneira intercambiável para caracteres curinga em uma comparação semelhante.Both the * and % can be used interchangeably for wildcard characters in a LIKE comparison. Se a cadeia de caracteres em uma cláusula LIKE contiver um * ou%, esses caracteres deverão ser colocados entre colchetes ([]).If the string in a LIKE clause contains a * or %, those characters should be enclosed in brackets ([]). Se um colchete estiver na cláusula, cada caractere de colchete deverá ser colocado entre colchetes (por exemplo [[] ou []]).If a bracket is in the clause, each bracket character should be enclosed in brackets (for example [[] or []]). Um caractere 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.A wildcard is allowed at the start and end of a pattern, or at the end of a pattern, or at the start of a pattern. Por exemplo:For example:

"ItemName LIKE ' * produto*'""ItemName LIKE '*product*'"

"ItemName LIKE ' * produto '""ItemName LIKE '*product'"

"ItemName como ' produto * '""ItemName LIKE 'product*'"

Caracteres curinga não são permitidos no meio de uma cadeia de caracteres.Wildcard characters are not allowed in the middle of a string. Por exemplo, ' te * XT ' não é permitido.For example, 'te*xt' is not allowed.

Referência da relação pai/filhoParent/Child Relation Referencing

Uma tabela pai pode ser referenciada em uma expressão ao aguardar o nome da Parentcoluna com.A parent table may be referenced in an expression by prepending the column name with Parent. Por exemplo, o Parent.Price faz referência à coluna da tabela pai Pricechamada.For example, the Parent.Price references the parent table's column named Price.

Quando um filho tiver mais de uma linha pai, use pai (RelationName). ColumnName.When a child has more than one parent row, use Parent(RelationName).ColumnName. Por exemplo, o pai (RelationName). O preço faz referência à coluna da tabela pai denominada Price por meio da relação.For example, the Parent(RelationName).Price references the parent table's column named Price via the relation.

Uma coluna em uma tabela filho pode ser referenciada em uma expressão ao aguardar o nome da Childcoluna com.A column in a child table may be referenced in an expression by prepending the column name with Child. No entanto, como as relações filhas podem retornar várias linhas, você deve incluir a referência à coluna filho em uma função de agregação.However, because child relationships may return multiple rows, you must include the reference to the child column in an aggregate function. Por exemplo, Sum(Child.Price) retornaria a soma da coluna chamada Price na tabela filho.For example, Sum(Child.Price) would return the sum of the column named Price in the child table.

Se uma tabela tiver mais de um filho, a sintaxe será: Child(RelationName).If a table has more than one child, the syntax is: Child(RelationName). Por exemplo, se uma tabela tiver duas tabelas filho chamadas Customers e Orders, e o DataRelation objeto for nomeado Customers2Orders, a referência será a seguinte:For example, if a table has two child tables named Customers and Orders, and the DataRelation object is named Customers2Orders, the reference would be as follows:

AVG (filho (Customers2Orders). QuantidadeAvg(Child(Customers2Orders).Quantity)

AgregaçõesAggregates

Há suporte para os seguintes tipos de agregação:The following aggregate types are supported:

Soma (Sum)Sum (Sum)

Média (média)Avg (Average)

Mín. (mínimo)Min (Minimum)

Máximo (máximo)Max (Maximum)

Contagem (contagem)Count (Count)

DESVPAD (desvio padrão estatístico)StDev (Statistical standard deviation)

Var (variação estatística).Var (Statistical variance).

As agregações normalmente são realizadas junto com as relações.Aggregates are ordinarily performed along relationships. Crie uma expressão de agregação usando uma das funções listadas anteriormente e uma coluna de tabela filho, conforme detalhado na referência de relação pai/filho que foi discutida anteriormente.Create an aggregate expression by using one of the functions listed earlier and a child table column as detailed in Parent/Child Relation Referencing that was discussed earlier. Por exemplo:For example:

Méd (filho. Price)Avg(Child.Price)

AVG (filho (Orders2Details). PreçoAvg(Child(Orders2Details).Price)

Uma agregação também pode ser executada em uma única tabela.An aggregate can also be performed on a single table. Por exemplo, para criar um resumo de figuras em uma coluna chamada "Price":For example, to create a summary of figures in a column named "Price":

Sum(Price)Sum(Price)

Observação

Se você usar uma única tabela para criar uma agregação, não haveria funcionalidade Group-by.If you use a single table to create an aggregate, there would be no group-by functionality. Em vez disso, todas as linhas exibirão o mesmo valor na coluna.Instead, all rows would display the same value in the column.

Se uma tabela não tiver linhas, as funções de agregação nullserão retornadas.If a table has no rows, the aggregate functions will return null.

Os tipos de dados sempre podem ser determinados examinando a DataType propriedade de uma coluna.Data types can always be determined by examining the DataType property of a column. Você também pode converter tipos de dados usando a função Convert, mostrada na seção a seguir.You can also convert data types using the Convert function, shown in the following section.

Uma agregação só pode ser aplicada a uma única coluna e nenhuma outra expressão pode ser usada dentro da agregação.An aggregate can only be applied to a single column and no other expressions can be used inside the aggregate.

FunçõesFunctions

As funções a seguir também têm suporte:The following functions are also supported:

CONVERT

DescriçãoDescription Converte a expressão específica em um tipo de .NET Framework especificado.Converts particular expression to a specified .NET Framework Type.
SintaxeSyntax Convert(expression, type)Convert(expression, type)
ArgumentsArguments expression--A expressão a ser convertida.expression -- The expression to convert.

type--O tipo de .NET Framework para o qual o valor será convertido.type -- The .NET Framework type to which the value will be converted.

Example: myDataColumn.Expression="Convert(total, 'System.Int32')"Example: myDataColumn.Expression="Convert(total, 'System.Int32')"

Todas as conversões são válidas com as seguintes exceções Boolean : pode ser forçado para e de Byte UInt16, SByte UInt64 Int16 Int32 Int64 UInt32,,,,,,, String e somente.All conversions are valid with the following exceptions: Boolean can be coerced to and from Byte, SByte, Int16, Int32, Int64, UInt16, UInt32, UInt64, String and itself only. Charpode ser forçado para e de Int32 String, UInt32, e para si só.Char can be coerced to and from Int32, UInt32, String, and itself only. DateTimepodem ser forçadas e provenientes String apenas.DateTime can be coerced to and from String and itself only. TimeSpanpodem ser forçadas e provenientes String apenas.TimeSpan can be coerced to and from String and itself only.

LEN

DescriçãoDescription Obtém o comprimento de uma cadeia de caracteresGets the length of a string
SintaxeSyntax LEN (expression)LEN(expression)
ArgumentsArguments expression--A cadeia de caracteres a ser avaliada.expression -- The string to be evaluated.

Example: myDataColumn.Expression="Len(ItemName)"Example: myDataColumn.Expression="Len(ItemName)"

ISNULL

DescriçãoDescription Verifica uma expressão e retorna a expressão marcada ou um valor de substituição.Checks an expression and either returns the checked expression or a replacement value.
SintaxeSyntax ISNULL(expression, replacementvalue)ISNULL(expression, replacementvalue)
ArgumentsArguments expression--A expressão a ser verificada.expression -- The expression to check.

replacementvalue--Se expression for null, replacementvalue será retornado.replacementvalue -- If expression is null, replacementvalue is returned.

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

IIF

DescriçãoDescription Obtém um dos dois valores, dependendo do resultado de uma expressão lógica.Gets one of two values depending on the result of a logical expression.
SintaxeSyntax IIF(expr, truepart, falsepart)IIF(expr, truepart, falsepart)
ArgumentsArguments expr--A expressão a ser avaliada.expr -- The expression to evaluate.

truepart--O valor a ser retornado se a expressão for verdadeira.truepart -- The value to return if the expression is true.

falsepart--O valor a ser retornado se a expressão for falsa.falsepart -- The value to return if the expression is false.

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

TRIM

DescriçãoDescription Remove todos os caracteres em branco à esquerda e à direita, como \r, \n, \t, ' 'Removes all leading and trailing blank characters like \r, \n, \t, ' '
SintaxeSyntax TRIM (expression)TRIM(expression)
ArgumentsArguments expression--A expressão a ser aparada.expression -- The expression to trim.

SUBSTRING

DescriçãoDescription Obtém uma subcadeia de caracteres de um comprimento especificado, começando em um ponto especificado na cadeia de caracteres.Gets a sub-string of a specified length, starting at a specified point in the string.
SintaxeSyntax SUBCADEIA DEexpressionCARACTERES start( length,,)SUBSTRING(expression, start, length)
ArgumentsArguments expression--A cadeia de caracteres de origem para a subcadeia de caracteres.expression -- The source string for the substring.

start--Inteiro que especifica onde a subcadeia de caracteres é iniciada.start -- Integer that specifies where the substring starts.

length--Inteiro que especifica o comprimento da subcadeia de caracteres.length -- Integer that specifies the length of the substring.

Exemplo: myDataColumn. expressão = "substring (telefone, 7, 8)"Example: myDataColumn.Expression = "SUBSTRING(phone, 7, 8)"

Observação

Você pode redefinir a Expression Propriedade atribuindo a ela um valor nulo ou uma cadeia de caracteres vazia.You can reset the Expression property by assigning it a null value or empty string. Se um valor padrão for definido na coluna expressão, todas as linhas previamente preenchidas serão atribuídas ao valor padrão Expression depois que a propriedade for redefinida.If a default value is set on the expression column, all previously filled rows are assigned the default value after the Expression property is reset.

Aplica-se a

Veja também