DataColumn.Expression Propiedad

Definición

Obtiene o establece la expresión utilizada para filtrar filas, calcular los valores de una columna o crear una columna agregada.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 de propiedad

Expresión para calcular el valor de una columna o para crear una columna agregada.An expression to calculate the value of a column, or create an aggregate column. El tipo de valor devuelto de una expresión está determinado por el DataType de la columna.The return type of an expression is determined by the DataType of the column.

Atributos

Excepciones

Las propiedades AutoIncrement o Unique están establecidas en true.The AutoIncrement or Unique property is set to true.

Al utilizar la función CONVERT, la expresión se evalúa como cadena, pero la cadena no contiene una representación que se pueda convertir al 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.

Al utilizar la función CONVERT, la conversión solicitada no es posible.When you are using the CONVERT function, the requested cast is not possible. Consulte la función de conversión de la siguiente sección para obtener información detallada sobre las posibles conversiones.See the Conversion function in the following section for detailed information about possible casts.

Al utilizar la función SUBSTRING, el argumento de inicio está fuera del intervalo.When you use the SUBSTRING function, the start argument is out of range.

O bien-Or-

Al utilizar la función SUBSTRING, el argumento de longitud está fuera del intervalo.When you use the SUBSTRING function, the length argument is out of range.

Al utilizar la función LEN o TRIM, la expresión no se evalúa como cadena.When you use the LEN function or the TRIM function, the expression does not evaluate to a string. Esto incluye expresiones que se evalúan como Char.This includes expressions that evaluate to Char.

Ejemplos

En el siguiente ejemplo se crean tres columnas DataTableen.The following example creates three columns in a DataTable. La segunda y la tercera columnas contienen expresiones; el segundo calcula el impuesto mediante una tasa de impuestos variable y el tercero agrega el resultado del cálculo al valor de la primera columna.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. La tabla resultante se muestra en un DataGrid control.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 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

Comentarios

Un uso de la Expression propiedad es para crear columnas calculadas.One use of the Expression property is to create calculated columns. Por ejemplo, para calcular un valor de impuestos, el precio unitario se multiplica por una tasa impositiva de una región específica.For example, to calculate a tax value, the unit price is multiplied by a tax rate of a specific region. Dado que los tipos impositivos varían de una región a otra, sería imposible poner una única tasa impositiva en una columna. en su lugar, el valor se calcula mediante Expression la propiedad, como se muestra en el código Visual Basic de la sección siguiente: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"). Columnas ("Tax"). Expresión = "UnitPrice * 0,086"DataSet1.Tables("Products").Columns("tax").Expression = "UnitPrice * 0.086"

Un segundo uso es crear una columna de agregado.A second use is to create an aggregate column. De forma similar a un valor calculado, un agregado realiza una operación basada en el conjunto completo de filas DataTablede.Similar to a calculated value, an aggregate performs an operation based on the complete set of rows in the DataTable. Un ejemplo sencillo es contar el número de filas devueltas en el conjunto.A simple example is to count the number of rows returned in the set. Este es el método que usaría para contar el número de transacciones completadas por un vendedor determinado, como se muestra en este 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)"  

Sintaxis de expresiónExpression Syntax

Al crear una expresión, utilice la ColumnName propiedad para hacer referencia a las columnas.When you create an expression, use the ColumnName property to refer to columns. Por ejemplo, si ColumnName para una columna es "UnitPrice" y otra "Quantity", la expresión sería la siguiente:For example, if the ColumnName for one column is "UnitPrice", and another "Quantity", the expression would be as follows:

"UnitPrice * Quantity""UnitPrice * Quantity"

Nota

Si se utiliza una columna en una expresión, se dice que la expresión tiene una dependencia en esa columna.If a column is used in an expression, then the expression is said to have a dependency on that column. Si se cambia el nombre o se quita una columna dependiente, no se produce ninguna excepción.If a dependent column is renamed or removed, no exception is thrown. Se producirá una excepción cuando se tenga acceso a la columna de expresión Now-broked.An exception will be thrown when the now-broken expression column is accessed.

Al crear una expresión para un filtro, escriba las cadenas entre comillas simples:When you create an expression for a filter, enclose strings with single quotation marks:

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

Si un nombre de columna contiene caracteres no alfanuméricos o empieza por un dígito o coincide (no distingue entre mayúsculas y minúsculas) con cualquiera de las siguientes palabras reservadas, requiere un tratamiento especial, como se describe en los párrafos siguientes.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.

yAnd

OtroBetween

SecundarioChild

FalseFalse

EnIn

EsIs

LikeLike

notNot

NullNull

O bienOr

PrimarioParent

TrueTrue

Si un nombre de columna cumple una de las condiciones anteriores, se debe incluir entre corchetes o como comillas 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 ejemplo, para usar una columna denominada "Column #" en una expresión, escribiría "[column #]":For example, to use a column named "Column#" in an expression, you would write either "[Column#]":

Total * [columna n.º]Total * [Column#]

o "`columna n.º" ":or "`Column#`":

Total * `columna n.º 'Total * `Column#`

Si el nombre de la columna está entre corchetes, los caracteres '] '\y ' ' (pero no los demás caracteres) del mismo se deben anteponer al carácter de barra diagonal inversa ("\").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. Si el nombre de la columna está incluido en caracteres de acento grave, no debe contener ningún carácter de acento grave.If the column name is enclosed in grave accent characters then it must not contain any grave accent characters in it. Por ejemplo, se escribiría una columna denominada "\Column []":For example, a column named "Column[]\" would be written:

Total * [columna [\]\\]Total * [Column[\]\\]

oor

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

Valores definidos por el usuarioUser-Defined Values

Los valores definidos por el usuario se pueden usar dentro de las expresiones que se van a comparar con los valores de columna.User-defined values may be used within expressions to be compared with column values. Los valores de cadena se deben incluir entre comillas simples (y cada carácter de comilla simple de un valor de cadena tiene que estar en el carácter de escape anteponiendo otro carácter de comilla simple).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). Los valores de fecha se deben incluir entre signos de almohadilla (#) o comillas simples (') en función del proveedor de datos.Date values should be enclosed within pound signs (#) or single quotes (') based on the data provider. Los decimales y la notación científica se admiten para los valores numéricos.Decimals and scientific notation are permissible for numeric values. Por ejemplo:For example:

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

"Precio < = 50,00""Price <= 50.00"

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

En el caso de las columnas que contienen valores de enumeración, convierta el valor en un tipo de datos entero.For columns that contain enumeration values, cast the value to an integer data type. Por ejemplo:For example:

"EnumColumn = 5""EnumColumn = 5"

Analizar expresiones literalesParsing Literal Expressions

Todas las expresiones literales deben expresarse en la configuración regional de la referencia cultural de todos los idiomas.All literal expressions must be expressed in the invariant culture locale. Cuando DataSet analiza y convierte expresiones literales, siempre usa la referencia cultural de todos los idiomas, no la referencia cultural actual.When DataSet parses and converts literal expressions, it always uses the invariant culture, not the current culture.

Los literales de cadena se identifican cuando hay comillas simples alrededor del valor.String literals are identified when there are single quotes surrounding the value. Por ejemplo:For example:

Ruiz'John'

Booleanlos literales son true y false; no se incluyen entre comillas en las expresiones.Boolean literals are true and false; they are not quoted in expressions.

Integerlos literales [+-]? [0-9] + se tratan como System.Int32, System.Int64 o System.Double.Integer literals [+-]?[0-9]+ are treated as System.Int32, System.Int64 or System.Double. System.Doublepuede perder precisión en función del tamaño del número.System.Double can lose precision depending on how large the number is. Por ejemplo, si el número del literal es 2147483650, DataSet primero intentará analizar el número Int32como.For example, if the number in the literal is 2147483650, DataSet will first attempt to parse the number as an Int32. Esto no se realizará correctamente porque el número es demasiado grande.This will not succeed because the number is too large. En este caso DataSet Int64, analizará el número como, lo que se realizará correctamente.In this case DataSet will parse the number as an Int64, which will succeed. Si el literal fuera un número mayor que el valor máximo de un Int64, DataSet analizará el literal mediante Double.If the literal was a number larger than the maximum value of an Int64, DataSet will parse the literal using Double.

Los literales reales que usan la notación científica, como 4.42372 E-30, se analizan con System.Double.Real literals using scientific notation, such as 4.42372E-30, are parsed using System.Double.

Los literales reales sin notación científica, pero con un separador decimal, System.Decimalse tratan como.Real literals without scientific notation, but with a decimal point, are treated as System.Decimal. Si el número supera los valores máximo o mínimo admitidos System.Decimalpor, se analiza System.Doublecomo.If the number exceeds the maximum or minimum values supported by System.Decimal, then it is parsed as a System.Double. Por ejemplo:For example:

142526,144524 se convertirá en Decimal.142526.144524 will be converted to a Decimal.

345262.78036719560925667 se tratará como un Double.345262.78036719560925667 will be treated as a Double.

OperadoresOperators

Se permite la concatenación mediante los operadores booleanos AND, OR y NOT.Concatenation is allowed using Boolean AND, OR, and NOT operators. Puede usar paréntesis para agrupar las cláusulas y forzar la prioridad.You can use parentheses to group clauses and force precedence. El operador AND tiene prioridad sobre otros operadores.The AND operator has precedence over other operators. Por ejemplo:For example:

(LastName = ' Smith ' o LastName = ' Jones ') Y FirstName = ' John '(LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'

Al crear expresiones de comparación, se permiten los siguientes operadores:When you create comparison expressions, the following operators are allowed:

<

>

<=

>=

<>

=

ININ

LIKELIKE

En las expresiones también se admiten los siguientes operadores aritméticos:The following arithmetic operators are also supported in expressions:

+agregado+ (addition)

- (resta)- (subtraction)

*multiplicación* (multiplication)

/(división)/ (division)

% (módulo)% (modulus)

Operadores de cadenaString Operators

Para concatenar una cadena, use el carácter +.To concatenate a string, use the + character. El valor de la CaseSensitive propiedad de la DataSet clase determina si las comparaciones de cadenas distinguen mayúsculas de minúsculas.The value of the CaseSensitive property of the DataSet class determines whether string comparisons are case-sensitive. Sin embargo, puede invalidar ese valor con CaseSensitive la propiedad de DataTable la clase.However, you can override that value with the CaseSensitive property of the DataTable class.

Caracteres comodínWildcard Characters

Tanto * como% se pueden usar indistintamente para caracteres comodín en una comparación LIKE.Both the * and % can be used interchangeably for wildcard characters in a LIKE comparison. Si la cadena de una cláusula LIKE contiene un carácter * o%, dichos caracteres se deben incluir entre corchetes ([]).If the string in a LIKE clause contains a * or %, those characters should be enclosed in brackets ([]). Si hay un corchete en la cláusula, cada carácter de corchete debe ir entre corchetes (por ejemplo, [[] o []]).If a bracket is in the clause, each bracket character should be enclosed in brackets (for example [[] or []]). Se permite un carácter comodín al principio y al final de un patrón, o al final de un patrón, o al principio de un patrón.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 ejemplo:For example:

"ItemName LIKE ' * Product*'""ItemName LIKE '*product*'"

"ItemName LIKE ' * Product '""ItemName LIKE '*product'"

"ItemName LIKE ' producto * '""ItemName LIKE 'product*'"

No se permiten caracteres comodín en el medio de una cadena.Wildcard characters are not allowed in the middle of a string. Por ejemplo, no se permite ' te * XT '.For example, 'te*xt' is not allowed.

Referencia de relaciones de elementos primarios y secundariosParent/Child Relation Referencing

Se puede hacer referencia a una tabla primaria en una expresión anteponiendo el nombre de la columna Parentcon.A parent table may be referenced in an expression by prepending the column name with Parent. Por ejemplo, Parent.Price hace referencia a la columna de la tabla Priceprimaria denominada.For example, the Parent.Price references the parent table's column named Price.

Cuando un elemento secundario tiene más de una fila primaria, use el elemento primario (RelationName). ColumnName.When a child has more than one parent row, use Parent(RelationName).ColumnName. Por ejemplo, el elemento primario (RelationName). Price hace referencia a la columna de la tabla primaria denominada Price a través de la relación.For example, the Parent(RelationName).Price references the parent table's column named Price via the relation.

Se puede hacer referencia a una columna de una tabla secundaria en una expresión anteponiendo el nombre de la columna Childcon.A column in a child table may be referenced in an expression by prepending the column name with Child. Sin embargo, dado que las relaciones secundarias pueden devolver varias filas, debe incluir la referencia a la columna secundaria en una función de agregado.However, because child relationships may return multiple rows, you must include the reference to the child column in an aggregate function. Por ejemplo, Sum(Child.Price) devolvería la suma de la columna Price mencionada en la tabla secundaria.For example, Sum(Child.Price) would return the sum of the column named Price in the child table.

Si una tabla tiene más de un elemento secundario, la sintaxis es Child(RelationName):.If a table has more than one child, the syntax is: Child(RelationName). Por ejemplo, si una tabla tiene dos tablas secundarias Customers denominadas y Orders, DataRelation y el objeto Customers2Ordersse denomina, la referencia sería la siguiente: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 (secundario (Customers2Orders). VolumenAvg(Child(Customers2Orders).Quantity)

AgregadosAggregates

Se admiten los siguientes tipos de agregado:The following aggregate types are supported:

SUM (suma)Sum (Sum)

Promedio (promedio)Avg (Average)

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

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

Count (recuento)Count (Count)

StDev (desviación estadística estándar)StDev (Statistical standard deviation)

Var (varianza estadística).Var (Statistical variance).

Normalmente, los agregados se realizan a lo largo de las relaciones.Aggregates are ordinarily performed along relationships. Cree una expresión de agregado con una de las funciones enumeradas anteriormente y una columna de tabla secundaria, tal como se detalla en la relación de elementos primarios y secundarios que se analizó 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 ejemplo:For example:

AVG (Child. Price)Avg(Child.Price)

AVG (secundario (Orders2Details). TarifasAvg(Child(Orders2Details).Price)

Un agregado también se puede realizar en una sola tabla.An aggregate can also be performed on a single table. Por ejemplo, para crear un resumen de las figuras en una columna denominada "Price":For example, to create a summary of figures in a column named "Price":

Sum(Precio)Sum(Price)

Nota

Si usa una sola tabla para crear un agregado, no habrá ninguna funcionalidad agrupar por.If you use a single table to create an aggregate, there would be no group-by functionality. En su lugar, todas las filas mostrarán el mismo valor en la columna.Instead, all rows would display the same value in the column.

Si una tabla no tiene filas, las funciones de agregado devolverán null.If a table has no rows, the aggregate functions will return null.

Los tipos de datos siempre se pueden determinar mediante el DataType examen de la propiedad de una columna.Data types can always be determined by examining the DataType property of a column. También puede convertir los tipos de datos mediante la función Convert, que se muestra en la sección siguiente.You can also convert data types using the Convert function, shown in the following section.

Un agregado solo se puede aplicar a una sola columna y no se puede usar ninguna otra expresión dentro del agregado.An aggregate can only be applied to a single column and no other expressions can be used inside the aggregate.

FuncionesFunctions

También se admiten las siguientes funciones:The following functions are also supported:

CONVERT

DescripciónDescription Convierte una expresión determinada en un tipo de .NET Framework especificado.Converts particular expression to a specified .NET Framework Type.
SintaxisSyntax Convertir (expression, type)Convert(expression, type)
ArgumentosArguments expression: Expresión que se va a convertir.expression -- The expression to convert.

type: El tipo de .NET Framework al que se convertirá el valor.type -- The .NET Framework type to which the value will be converted.

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

Todas las conversiones son válidas con las excepciones siguientes Boolean : se puede convertir a y desde Byte, SByte UInt32 Int16 UInt16 Int32 Int64,,,,,, UInt64, String solo y.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. Charsolo se puede convertir a y desde Int32 String, UInt32, y solo.Char can be coerced to and from Int32, UInt32, String, and itself only. DateTimesolo se puede convertir a y desde String y solo.DateTime can be coerced to and from String and itself only. TimeSpansolo se puede convertir a y desde String y solo.TimeSpan can be coerced to and from String and itself only.

LEN

DescripciónDescription Obtiene la longitud de una cadena.Gets the length of a string
SintaxisSyntax LEN (expression)LEN(expression)
ArgumentosArguments expression: La cadena que se va a evaluar.expression -- The string to be evaluated.

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

ISNULL

DescripciónDescription Comprueba una expresión y devuelve la expresión comprobada o un valor de reemplazo.Checks an expression and either returns the checked expression or a replacement value.
SintaxisSyntax ISNULL(expression, replacementvalue)ISNULL(expression, replacementvalue)
ArgumentosArguments expression: Expresión que se va a comprobar.expression -- The expression to check.

replacementvalue: Si Expression es null, replacementvalue se devuelve.replacementvalue -- If expression is null, replacementvalue is returned.

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

IIF

DescripciónDescription Obtiene uno de dos valores según el resultado de una expresión lógica.Gets one of two values depending on the result of a logical expression.
SintaxisSyntax IIF(expr, truepart, falsepart)IIF(expr, truepart, falsepart)
ArgumentosArguments expr: Expresión que se va a evaluar.expr -- The expression to evaluate.

truepart: El valor que se devuelve si la expresión es true.truepart -- The value to return if the expression is true.

falsepart: El valor que se devuelve si la expresión es falsa.falsepart -- The value to return if the expression is false.

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

TRIM

DescripciónDescription Quita todos los caracteres en blanco iniciales y finales, como \r, \n, \t, ' 'Removes all leading and trailing blank characters like \r, \n, \t, ' '
SintaxisSyntax TRIM (expression)TRIM(expression)
ArgumentosArguments expression: Expresión que se va a recortar.expression -- The expression to trim.

SUBSTRING

DescripciónDescription Obtiene una subcadena de una longitud especificada, a partir de un punto especificado de la cadena.Gets a sub-string of a specified length, starting at a specified point in the string.
SintaxisSyntax SUBSTRING(expression, start, length)SUBSTRING(expression, start, length)
ArgumentosArguments expression: La cadena de origen de la subcadena.expression -- The source string for the substring.

start--Entero que especifica dónde comienza la subcadena.start -- Integer that specifies where the substring starts.

length--Entero que especifica la longitud de la subcadena.length -- Integer that specifies the length of the substring.

Ejemplo: myDataColumn. Expression = "substring (Phone, 7, 8)"Example: myDataColumn.Expression = "SUBSTRING(phone, 7, 8)"

Nota

Puede restablecer la Expression propiedad asignándole un valor nulo o una cadena vacía.You can reset the Expression property by assigning it a null value or empty string. Si se establece un valor predeterminado en la columna expresión, a todas las filas rellenadas previamente se les asigna Expression el valor predeterminado después de que se restablezca la propiedad.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.

Se aplica a

Consulte también: