Para ver el artículo en inglés, active la casilla Inglés. También puede ver el texto en inglés en una ventana emergente si pasa el puntero del mouse por el texto.
Traducción
Inglés
Esta documentación está archivada y no tiene mantenimiento.

DataColumn.Expression (Propiedad)

Obtiene o establece la expresión utilizada para filtrar filas, calcular los valores de una columna o crear una columna agregada.

Espacio de nombres:  System.Data
Ensamblado:  System.Data (en System.Data.dll)

public string Expression { get; set; }

Valor de propiedad

Tipo: System.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.

ExcepciónCondición
ArgumentException

Las propiedades AutoIncrement o Unique están establecidas en true.

FormatException

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.

InvalidCastException

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.

ArgumentOutOfRangeException

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.

Exception

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.

Uno de los usos de la propiedad Expression es para crear columnas calculadas. Por ejemplo, para calcular el valor de un impuesto el precio unitario se multiplica por el tipo impositivo de una región concreta. Puesto que los tipos impositivos varían de una región a otra, no se puede colocar un único tipo impositivo en una columna; en su lugar, se calcula el valor mediante la propiedad Expression, tal como se muestra en el código de Visual Basic que aparece en la siguiente sección:

DataSet1.Tables("Products").Columns("tax").Expression = "UnitPrice * 0,086"

Un segundo uso es para crear una columna agregada. Similar a un valor calculado, un agregado realiza una operación basada en todo el conjunto de filas del objeto DataTable. Un ejemplo sencillo es el recuento del número de filas devuelto en el conjunto. Éste es el método que se utilizaría para contar el número de transacciones finalizadas por un vendedor determinado, como se muestra en este código de Visual Basic:

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

Sintaxis de las expresiones

Cuando cree una expresión, utilice la propiedad ColumnName para hacer referencia a las columnas. Por ejemplo, si la propiedad ColumnName para una columna es "UnitPrice" y para otra "Quantity", la expresión será:

"UnitPrice * Quantity"

NotaNota

Si en una expresión se utiliza una columna, se dice que la expresión tiene una dependencia de esa columna. Cuando se cambia el nombre o se quita la columna de la que depende la expresión, no se inicia ninguna excepción. Pero se producirá una excepción cuando se obtenga acceso a la columna de la expresión ahora interrumpida.

Al crear una expresión para un filtro, las cadenas se deben escribir entre comillas sencillas:

"LastName = 'Jones'"

Si un nombre de columna contiene cualquier carácter no alfanumérico 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, tal y como se describe en los siguientes párrafos.

Y

Between

Elemento secundario

False

In

Is

Like

Not

Null

Or

Primario

True

Si un nombre de columna satisface una de las condiciones anteriores, debe estar entre corchetes o entre comillas "`" (acento grave). Por ejemplo, para utilizar una columna denominada "Column#" en una expresión, se deberá escribir "[Column#]":

Total * [Column#]

o "`Column#`":

Total * `Column#`

Si el nombre de columna está encerrado entre corchetes, los caracteres ']' y '\' (pero ningún otro carácter) que incluya se deben escapar anteponiéndolos con el carácter de barra diagonal inversa ("\"). Si el nombre de columna está encerrado entre caracteres de acento grave, no debe contener ningún carácter de acento grave. Por ejemplo, una columna denominada "Column[]\" se escribirá:

Total * [Column[\]\\]

o

Total * `Column[]\`

Valores definidos por el usuario

Los valores definidos por el usuario se pueden utilizar en expresiones para compararlos con valores de columnas. Los valores de cadena se deberían agregar dentro de las comillas sencillas (y cada carácter de comillas simples en un valor de cadena tiene que ser escapado anteponiéndolo con otro carácter de comillas simples). Los valores de fecha se deben poner entre signos de libra esterlina (#) o comillas simples (') dependiendo del proveedor de datos. Se permiten decimales y notaciones científicas para los valores numéricos. Por ejemplo:

"FirstName = 'John'"

"Price <= 50.00"

"Birthdate < #31/1/82#"

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

"EnumColumn = 5"

Analizar las expresiones literales

Todas las expresiones literales se deben expresar en la configuración regional de la referencia cultural de todos los idiomas. Cuando DataSet analiza y convierte las expresiones literales, siempre utiliza la referencia cultural de todos los idiomas, no la referencia cultural actual.

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

'John'

Los literales Boolean son true y false; no aparecen entrecomillados en expresiones.

Los literales Integer [+ -]?[0-9]+ se tratan como System.Int32, System.Int64 o System.Double. System.Double puede perder precisión dependiendo de lo grande que sea el número. Por ejemplo, si el número en el literal es 2147483650, DataSet intentará analizar el número como Int32 primero. Esto no tendrá éxito porque el número es demasiado grande. En este caso DataSet analizará el número como Int64, y será correcto. Si el literal fuera un número mayor que el valor máximo de Int64, DataSet analizará el literal usando Double.

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

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

142526.144524 se convertirá en Decimal.

345262.78036719560925667 se tratará como un Double.

Operadores

Se permite la concatenación mediante operadores booleanos AND, OR y NOT. Se pueden utilizar paréntesis para agrupar cláusulas y forzar una precedencia. El operador AND tiene precedencia sobre otros operadores. Por ejemplo:

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

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

<

>

<=

>=

<>

=

IN

LIKE

También se admiten los siguientes operadores aritméticos en las expresiones:

+ (suma)

- (resta)

* (multiplicación)

/ (división)

% (módulo)

Operadores de cadena

Para concatenar una cadena se utiliza el carácter +. El valor de la propiedad CaseSensitive de la clase DataSet determina si en las comparaciones de cadenas se distingue entre mayúsculas y minúsculas. Sin embargo, se puede reemplazar ese valor por la propiedad CaseSensitive de la clase DataTable.

Caracteres comodín

Tanto * como % se pueden utilizar indistintamente como caracteres comodín en una comparación LIKE. Si la cadena de una cláusula LIKE contiene un carácter * o %, dichos caracteres se deben establecer como caracteres de escape entre corchetes ([]). Si hay un corchete en la cláusula, cada carácter de corchete deben estar entre corchetes (por ejemplo, [[] o []]). Se permite un carácter comodín al comienzo y al final de un modelo, al final de un modelo o bien al comienzo de un modelo. Por ejemplo:

"ItemName LIKE '*product*'"

"ItemName LIKE '*product'"

"ItemName LIKE 'product*'"

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

Referencia a relaciones primarias y secundarias

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

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 Child al nombre de la columna. Sin embargo, dado que las relaciones secundarias pueden devolver varias filas, se 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 de la tabla secundaria.

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

Avg(Child(Customers2Orders).Quantity)

Agregados

Se admiten los siguientes tipos de agregados:

Sum (Suma)

Avg (Promedio)

Min (Mínimo)

Max (Máximo)

Count (Recuento)

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

Var (Varianza estadística).

Normalmente los agregados se llevan a cabo en las relaciones. Cree una expresión de agregado mediante una de las funciones enumeradas anteriormente y una columna de una tabla secundaria, como se describe en el apartado Referencia a relaciones primarias y secundarias que se ha analizado anteriormente. Por ejemplo:

Avg(Child.Price)

Avg(Child(Orders2Details).Price)

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

Sum(Price)

NotaNota

Si se utiliza una sola tabla para crear un agregado, no habrá ninguna funcionalidad de agrupación. En su lugar, todas las filas mostrarán 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 mediante el examen de la propiedad DataType de una columna. También se pueden convertir los tipos de datos mediante la función Convert, como se muestra en la siguiente sección.

Funciones

También se admiten las funciones siguientes:

CONVERT

Descripción

Convierte una expresión concreta en un tipo de .NET Framework especificado.

Sintaxis

Convert( expression, type )

Argumentos

expression: expresión que se va a convertir.

type: tipo de .NET Framework al que se convertirá el valor.

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

Todas las conversiones son válidas con las siguientes excepciones: Boolean sólo puede convertirse a y desde Byte, SByte, Int16, Int32, Int64, UInt16, UInt32, UInt64, String y él mismo. Char se puede convertir en y desde Int32, UInt32, String y él mismo. DateTime se puede convertir en y desde String y él mismo. TimeSpan se puede convertir en y desde String y él mismo.

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 comprobada o un valor de sustitución.

Sintaxis

ISNULL( expression, replacementvalue )

Argumentos

expression: expresión que se va a comprobar.

replacementvalue: si la expresión es null, se devuelve replacementvalue.

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

IIF

Descripción

Obtiene uno de entre dos valores, dependiendo del 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 devolverá si la expresión es true.

falsepart: valor que se devolverá si la expresión es false.

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

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 subcadena de una longitud especificada, empezando por un punto concreto de la cadena.

Sintaxis

SUBSTRING(expression, start, length)

Argumentos

expression: cadena de origen para la subcadena.

start: entero que especifica dónde comienza la subcadena.

length: entero que especifica la longitud de la subcadena.

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

NotaNota

Se puede restablecer la propiedad Expression asignándole un valor nulo o una cadena vacía. Si se establece un valor predeterminado en la columna de expresión, se asignará el valor predeterminado a todas las filas rellenadas anteriormente después de restablecer la propiedad Expression.

En el ejemplo siguiente se crean tres columnas en un objeto DataTable. La segunda y la tercera columna contienen expresiones; la segunda calcula impuestos mediante un tipo impositivo variable y la tercera agrega el resultado del cálculo al valor de la primera columna. La tabla resultante aparece en un control DataGrid.


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;
}


.NET Framework

Compatible con: 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Windows 7, Windows Vista SP1 o posterior, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (no se admite Server Core), Windows Server 2008 R2 (se admite Server Core con SP1 o posterior), Windows Server 2003 SP2

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.
Mostrar: