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.

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

Valor de propiedad

String

Expresión para calcular el valor de una columna o para crear una columna agregada. El tipo de valor devuelto de una expresión está determinado por el DataType de la columna.

Atributos

Excepciones

Las propiedades AutoIncrement o Unique están establecidas en 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.

Al utilizar la función CONVERT, la conversión solicitada no es posible. Consulte la función de conversión de la siguiente sección para obtener información detallada sobre las posibles conversiones.

Al utilizar la función SUBSTRING, el argumento de inicio está fuera del intervalo.

-O bien-

Al utilizar la función SUBSTRING, el argumento de longitud está fuera del intervalo.

Al utilizar la función LEN o TRIM, la expresión no se evalúa como cadena. Esto incluye expresiones que se evalúan como Char.

Ejemplos

En el ejemplo siguiente se crean tres columnas en .DataTable Las columnas segunda y tercera contienen expresiones; el segundo calcula el impuesto mediante un tipo de impuesto variable y el tercero agrega el resultado del cálculo al valor de la primera columna. La tabla resultante se muestra en un 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 crear columnas calculadas. Por ejemplo, para calcular un valor fiscal, el precio unitario se multiplica por una tasa fiscal de una región específica. Dado que los tipos fiscales varían de una región a otra, sería imposible poner una tasa de impuestos única en una columna; en su lugar, el valor se calcula mediante la Expression propiedad , como se muestra en el código de Visual Basic en la sección siguiente:

DataSet1.Tables("Products"). Columns("tax"). Expresión = "UnitPrice * 0,086"

Un segundo uso es crear una columna de agregado. De forma similar a un valor calculado, un agregado realiza una operación basada en el conjunto completo de filas de DataTable. Un ejemplo sencillo es contar el número de filas devueltas en el conjunto. 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 código de Visual Basic:

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

Sintaxis de expresión

Al crear una expresión, use la ColumnName propiedad para hacer referencia a columnas. Por ejemplo, si para ColumnName una columna es "UnitPrice" y otra "Quantity", la expresión sería la siguiente:

"UnitPrice * Quantity"

Nota

Si se usa una columna en una expresión, se dice que la expresión tiene una dependencia en esa columna. Si se cambia el nombre o se quita una columna dependiente, no se produce ninguna excepción. Se producirá una excepción cuando se acceda a la columna de expresión ahora rota.

Al crear una expresión para un filtro, incluya cadenas con comillas simples:

"LastName = 'Jones'"

Si un nombre de columna contiene caracteres no alfanuméricos o comienza con un dígito o coincide (sin distinción entre mayúsculas y minúsculas) cualquiera de las siguientes palabras reservadas, requiere un control especial, como se describe en los párrafos siguientes.

And

Entre las

Elemento secundario

False

En

Is

Like

Not

Null

O bien

Parent

True

Si un nombre de columna cumple una de las condiciones anteriores, debe ajustarse entre corchetes o las comillas "'" (énfasis grave). Por ejemplo, para usar una columna denominada "Column#" en una expresión, escribiría "[Column#]":

Total * [Column#]

o "`Column#'":

Total * `Columna#'

Si el nombre de la columna se incluye entre corchetes, los caracteres "]" y "\" (pero no cualquier otro carácter) en él deben tener caracteres de escape precediéndolos con el carácter de barra diagonal inversa ("").\ Si el nombre de la columna está incluido en caracteres de énfasis grave, no debe contener ningún carácter de énfasis grave en él. Por ejemplo, se escribiría una columna denominada "Column[]\":

Total * [Columna[\]\\]

o

Total * `Columna[]\`

valores de User-Defined

Los valores definidos por el usuario se pueden usar dentro de expresiones para compararlos con los valores de columna. Los valores de cadena deben incluirse entre comillas simples (y cada carácter de comillas simples de un valor de cadena debe tener caracteres de escape preprocesándolo con otro carácter de comillas simples). Los valores de fecha deben ir entre signos de libra (#) o comillas simples (') en función del proveedor de datos. Los decimales y la notación científica están permitidos para los valores numéricos. Por ejemplo:

"FirstName = 'John'"

"Precio <= 50,00"

"Fecha de nacimiento < #1/31/82#"

Para las columnas que contienen valores de enumeración, convierta el valor en un tipo de datos entero. Por ejemplo:

"EnumColumn = 5"

Análisis de expresiones literales

Todas las expresiones literales deben expresarse en la configuración regional de referencia cultural invariable. Cuando DataSet analiza y convierte expresiones literales, siempre usa la referencia cultural invariable, no la referencia cultural actual.

Los literales de cadena se identifican cuando hay comillas simples que rodean el valor. Por ejemplo:

"John"

Boolean los literales son verdaderos y falsos; no están entrecomillados en expresiones.

Integer literales [+-]? [0-9]+ se tratan como System.Int32, System.Int64 o System.Double. System.Double puede perder precisión en función del tamaño del número. Por ejemplo, si el número del literal es 2147483650, DataSet primero intentará analizar el número como .Int32 Esto no se realizará correctamente porque el número es demasiado grande. En este caso DataSet , analizará el número como , Int64que se realizará correctamente. Si el literal era un número mayor que el valor máximo de int64, DataSet analizará el literal mediante Double.

Los literales reales que usan notación científica, como 4.42372E-30, se analizan mediante System.Double.

Los literales reales sin notación científica, pero con un separador decimal, se tratan como System.Decimal. Si el número supera los valores máximos o mínimos admitidos por System.Decimal, se analiza como .System.Double Por ejemplo:

142526.144524 se convertirá en .Decimal

345262.78036719560925667 se tratará como .Double

Operadores

La concatenación se permite mediante operadores BOOLEAN AND, OR y NOT. Puede usar paréntesis para agrupar cláusulas y forzar la precedencia. El operador AND tiene prioridad sobre otros operadores. Por ejemplo:

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

Al crear expresiones de comparación, se permiten los operadores siguientes:

<

>

<=

>=

<>

=

IN

LIKE

Los siguientes operadores aritméticos también se admiten en expresiones:

+ (adición)

- (resta)

* (multiplicación)

/ (división)

% (módulo)

Operadores de cadena

Para concatenar una cadena, use el carácter + . El valor de la CaseSensitive propiedad de la DataSet clase determina si las comparaciones de cadenas distinguen mayúsculas de minúsculas. Sin embargo, puede invalidar ese valor con la CaseSensitive propiedad de la DataTable clase .

Caracteres comodín

Tanto * como % se pueden usar indistintamente para los caracteres comodín en una comparación LIKE. Si la cadena de una cláusula LIKE contiene un * o %, esos caracteres deben incluirse entre corchetes ([]). Si un corchete está en la cláusula , cada carácter de corchete debe ir entre corchetes (por ejemplo[] o []]). 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. Por ejemplo:

"ItemName LIKE '*product*'"

"ItemName LIKE '*product'"

"ItemName LIKE 'product*'"

No se permiten caracteres comodín en medio de una cadena. Por ejemplo, no se permite 'te*xt'.

Referencia de relación de elementos primarios o secundarios

Se puede hacer referencia a una tabla primaria en una expresión anteponiendo el nombre de columna con Parent. Por ejemplo, hace Parent.Price referencia a la columna de la tabla primaria denominada Price.

Cuando un elemento secundario tiene más de una fila primaria, use Parent(RelationName). Columnname. Por ejemplo, Parent(RelationName). Price hace referencia a la columna de la tabla primaria denominada Price a través de la relación.

Se puede hacer referencia a una columna de una tabla secundaria en una expresión anteponiendo el nombre de columna con 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. Por ejemplo, Sum(Child.Price) devolvería la suma de la columna denominada Price en la tabla secundaria.

Si una tabla tiene más de un elemento secundario, la sintaxis es: Child(RelationName). Por ejemplo, si una tabla tiene dos tablas secundarias denominadas Customers y Orders, y el DataRelation objeto se denomina Customers2Orders, la referencia sería la siguiente:

Avg(Child(Customers2Orders). Cantidad)

Agregados

Se admiten los siguientes tipos de agregado:

Sum (Sum)

Promedio (promedio)

Min (Minimum) (Mínimo)

Máximo (máximo)

Count (recuento)

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

Var (varianza estadística).

Los agregados se realizan normalmente a lo largo de las relaciones. Cree una expresión de agregado mediante una de las funciones enumeradas anteriormente y una columna de tabla secundaria, tal como se detalla en Referencia de relación de elementos primarios o secundarios que se describen anteriormente. Por ejemplo:

Avg(Child.Price)

Avg(Child(Orders2Details). Precio)

También se puede realizar un agregado en una sola tabla. Por ejemplo, para crear un resumen de ilustraciones en una columna denominada "Price":

Sum(Precio)

Nota

Si usa una sola tabla para crear un agregado, no habría ninguna funcionalidad de agrupación por. En su lugar, todas las filas mostrarían el mismo valor en la columna.

Si una tabla no tiene filas, las funciones de agregado devolverán null.

Los tipos de datos siempre se pueden determinar examinando la DataType propiedad de una columna. También puede convertir tipos de datos mediante la función Convert, que se muestra en la sección siguiente.

Un agregado solo se puede aplicar a una sola columna y no se puede usar ninguna otra expresión dentro del agregado.

Funciones

También se admiten las siguientes funciones:

CONVERT

Descripción Convierte una expresión determinada en un tipo de .NET Framework especificado.
Sintaxis Convert(expression, type)
Argumentos expression -- Expresión que se va a convertir.

type -- .NET tipo al que se convertirá el valor.

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

Todas las conversiones son válidas con las siguientes excepciones: Boolean se pueden convertir en y desde Byte, SByte, , Int16``Int64``UInt16``Int32, UInt32, , UInt64y String solo a sí misma. Char solo se puede convertir a y desde Int32, UInt32, Stringy en sí mismo. DateTime puede ser coerced a y desde y desde String sí solo. TimeSpan puede ser coerced a y desde y desde String sí solo.

LEN

Descripción Obtiene la longitud de una cadena.
Sintaxis LEN(expression)
Argumentos expression -- Cadena que se va a evaluar.

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

ISNULL

Descripción Comprueba una expresión y devuelve la expresión activada o un valor de reemplazo.
Sintaxis ISNULL(expression, replacementvalue)
Argumentos expression -- Expresión que se va a comprobar.

replacementvalue -- Si expression es null, replacementvalue se devuelve .

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

IIF

Descripción Obtiene uno de los dos valores según el resultado de una expresión lógica.
Sintaxis IIF(expr, truepart, falsepart)
Argumentos expr -- Expresión que se va a evaluar.

truepart -- Valor que se va a devolver si la expresión es true.

falsepart -- Valor que se va a devolver si la expresión es false.

Ejemplo: myDataColumn.Expression = "IIF(total>1000, 'cara', 'estimado')

TRIM

Descripción Quita todos los caracteres en blanco iniciales y finales, como \r, \n, \t, ' ' '
Sintaxis TRIM(expression)
Argumentos expression -- Expresión que se va a recortar.

SUBSTRING

Descripción Obtiene una subcadenilla de una longitud especificada, comenzando en un punto especificado de la cadena.
Sintaxis SUBSTRING(expression, start, length)
Argumentos expression -- La cadena de origen de la subcadena.

start -- Entero que especifica dónde se inicia la subcadena.

length -- Entero que especifica la longitud de la subcadena.

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

Nota

Puede restablecer la Expression propiedad asignando un valor NULO o una cadena vacía. Si se establece un valor predeterminado en la columna de expresión, a todas las filas rellenadas previamente se les asigna el valor predeterminado después de restablecer la Expression propiedad.

Se aplica a

Consulte también