martes, 31 de marzo de 2009

Sumar una columna en un Dataset

Buenas compañeros,

El día de ayer me preguntaba si podía hacer una suma de una columna del dataset, pero sin recorrerlo.

Bueno, al parecer, desde la versión 2.0 esto se puede hacer con las funciones compute.

Les envío mi ejemplo y los sitios donde encontré la información:

Suma débitos:
Dim db As Object = dt.Compute("Sum(Monto)", "Mov = 'D'")

Suma créditos:
Dim db As Object = dt.Compute("Sum(Monto)", "Mov = 'C'")

Puntos a considerar:
El primer argumento de la función es el cálculo, y el segundo el filtro.
Permite: SUM, AVG, MIN, MAX, COUNT, y otras más que verán en los links que les adjunto.
Esto NO es permitido: Sum (Monto1 – Monto2). Habría que crear una columna computada y luego sumarla.
Todos los campos de un datatable creado manualmente son string por defecto, o sea que estos cálculos no se pueden hacer. Hay que crear la columna del tipo correcto.
IMPORTANTE: Este método aparentemente no es muy eficiente en datasets demasiado grandes, pero es mejor que recorrer el dataset. En tema de performance lo ideal es hacer esto directamente en la Base de Datos si es posible (http://weblogs.asp.net/eporter/archive/2003/11/11/36977.aspx)

Fuentes:
http://msdn.microsoft.com/es-es/library/system.data.datatable.compute(VS.80).aspx
http://msdn.microsoft.com/es-es/library/system.data.datacolumn.expression(VS.80).aspx

No hay comentarios:

Publicar un comentario