Propiedad System.Data.DataColumn.Expression

En este artículo se proporcionan comentarios adicionales a la documentación de referencia de esta API.

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 las tasas fiscales varían de una región a otra, sería imposible colocar una tasa fiscal única en una columna; en su lugar, el valor se calcula mediante la Expression propiedad , como se muestra en el código siguiente:

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

Un segundo uso consiste en crear una columna de agregado. De forma similar a un valor calculado, un agregado realiza una operación en función del 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 el código siguiente:

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 es:

"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 tenga acceso a la columna de expresión interrumpida.

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, 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

Between

Child

False

In

Is

Like

Not

Null

Or

Parent

True

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

Total * [Column#]

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

Total * [Column[\]\\]

o

Total * 'Column[]\'

Valores definidos por el usuario

Los valores definidos por el usuario se pueden usar en 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 ser de escape prepending it con otro carácter de comilla simple). Los valores de fecha deben incluirse dentro de 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'"

"Price <= 50.00"

"Birthdate < #1/31/2006#"

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 true y false; no se citan en expresiones.

Integer literales [+-]? [0-9]+ se tratan como System.Int32, System.Int64o 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, analiza el número como , Int64que se realizará correctamente. Si el literal es un número mayor que el valor máximo de int64, DataSet analiza 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 convierte en .Decimal
  • 345262.78036719560925667 se trata 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:

  • + (suma)
  • - (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

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

Relación primaria o secundaria que hace referencia a

Se puede hacer referencia a una tabla primaria en una expresión mediante la prepending del nombre de columna con Parent. Por ejemplo, Parent.Price hace 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 mediante la prepending del 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).Quantity)

Agregados

Se admiten los siguientes tipos de agregado:

  • Sum (Suma)
  • Avg (Promedio)
  • Min (Mínimo)
  • Max (Máximo)
  • Count (Recuento)
  • StDev (Desviación estándar estadística)
  • Var (Varianza estadística)

Normalmente, los agregados se realizan 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 y como se detalla en Relación primaria o secundaria que hace referencia a . Por ejemplo:

  • Avg(Child.Price)
  • Avg(Child(Orders2Details).Price)

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(Price)

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 Convert función , 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

Esta función convierte una expresión en un tipo de .NET especificado.

Convert(expression, type)
Argumento Descripción
expression Expresión de que se va a convertir.
type Tipo de .NET 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, , Int16Int64UInt16Int32, UInt32, , UInt64y String solo a sí misma. Char se puede coerced a y desde Int32, UInt32, String, y solo a sí mismo. DateTime se puede coerced a y desde String sí solo. TimeSpan se puede coerced a y desde String sí solo.

LEN

Esta función obtiene la longitud de una cadena.

LEN(expression)
Argumentos Descripción
expression Cadena que se va a evaluar.

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

ISNULL

Esta función comprueba una expresión y devuelve la expresión comprobada o un valor de reemplazo.

ISNULL(expression, replacementvalue)
Argumentos Descripción
expression Expresión que se va a comprobar.
replacementvalue Si expression es null, replacementvalue se devuelve .

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

IIF

Esta función obtiene uno de dos valores en función del resultado de una expresión lógica.

IIF(expr, truepart, falsepart)
Argumentos Descripción
expr La 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, 'expensive', 'dear')

TRIM

Esta función quita todos los caracteres en blanco iniciales y finales, como \r, \n, \t y '.

TRIM(expression)
Argumento Descripción
expression Expresión que se va a recortar.

SUBSTRING

Esta función obtiene una subcadena de una longitud especificada, comenzando en un punto especificado de la cadena.

SUBSTRING(expression, start, length)
Argumento Descripción
expression Cadena de origen para 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 NULL 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.