Método Compute característica del DataTable

0
174

Ej.

ds.Tables(“Ordenes”).Compute(“Sum(Total)”, “CodigoVendedor = 5”)

Cuando utilizemos Compute sobre una tabla el resultado esperado son valores como un string, un integer, etc. A este valor obtenido debemos hacerle una conversión al tipo de dato que deseamos ya que podría generar error por diferencias de objetos.

Parámetros utilizados en el Compute
expression: Expresión que se va a calcular.
filter: Filtro que va a limitar las filas que se evalúan en la expresión.

Valor de retorno: Como mencionamos anteriormente es un objeto sin tipo de datos definido, por este motivo es que hay que aplicarle una conversión (Convert,ctype, cdate, cstr, etc).

Cuales son las expresiones válidas cuando utilicemos Compute?
Count(Empleados) donde Empleados sería el nombre de la columna.

Sum (Suma)

Avg (Promedio)

Min (Mínimo)

Max (Máximo)

Count(Recuento)

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

Var (Varianza estadística)

Algo muy importante es que en la expresión no se pueden hacer operaciones matemáticas como multiplicar dos columnas (o sumar, restar, dividir, etc)
Sum (Cantidad * Precio) -> NO

Si realmente necesita una operación en dos o mas columnas debe crear un DataColumn, establecer su propiedad Expression adecuada y utilizar una expresión de Compute en la columna resultante. En ese caso, dado un DataColumn con el nombre “total” y la propiedad Expression establecida, Cantidad * Precio. Luego en el método Compute si hace Sum(total) para obtener el valor esperado.

Ver Artículo en DotNetcr Como utilizar la propiedad Expression en un DataTable, para comprender mejor este artículo.

El segundo valor en el método Compute es el filtro, donde igual en el SQL una especie de where donde le indicamos los criterios que nos retornen solo los datos que ocupemos.
FechaNacimiento > 1/1/1980 AND FechaNacimiento < 1/1/1990
Edad = 18
Precio <= 2000 Podemos utilizar para los filtros:
<

>

<=

>=

<>

=

IN

LIKE

Ejemplos:

[Visual Basic]
Private Sub CalculoOrdenesDia(ByVal ds As DataSet)
'DataTable llamado “Ordenes” que contiene una columna de “Total”
Dim CantidadOrdenes as Integer
CantidadOrdenes = CType(ds.Tables(“Ordenes”).Compute _
(“Sum(Total)”, “CodigoVendedor = 5”),Integer)
End Sub

[C#]
private void CalculoOrdenesDia(DataSet myDataSet){
// DataTable llamado “Ordenes” que contiene una columna de “Total”
Integer CantidadOrdenes;
CantidadOrdenes = (int)myDataSet.Tables[“Ordenes”].Compute(“Sum(Total)”, “CodigoVendedor = 5”);
}

Con más de 18 años de experiencia en programación, experto en lenguajes .NET, VB, C#, ASP.NET, Xamarin, XCode, DBA en SQL Server. Creador de dotnetcr.com, sitio web para programadores en español.

royrojas.com | dotnetcr.com

Dejar respuesta

Please enter your comment!
Please enter your name here