lunes, 19 de septiembre de 2011

Linq To DataSet: Convirtiendo nuestra consulta a DataTable

Hoy he estado trabajando con Linq To DataSet y tenía la necesidad de devolver las consultas Linq como objetos DataTable.

Para ello he visto que hay disponibles distintas opciones.

Partiendo del siguiente código:

        Dim q =

            From r In customersDataTable.AsEnumerable

            Where r.Field(Of String)("CustomerID") = "4004008"

 

        Dim table1 As DataTable = q.AsDataView.Table

        Dim table2 As DataTable = q.AsDataView.ToTable

        Dim table3 As DataTable = q.CopyToDataTable

 

table1 devolverá el objeto DataTable llamado “customersDataTable”, así que el filtro especificado en la consulta de Linq no será efectivo, luego no utilizaré esta forma.

table2 convierte el resultado de la consulta a un objeto DataTable donde sí se aplica el filtro.

table3 copia el resultado de la consulta a un objeto DataTable donde de nuevo, sí se aplica el filtro.

En este punto, está claro que excepto la primera forma, las 2 siguientes son válidas. CopyToDataTable tiene la ventaja de que trabaja con tipos anónimos (Ni CopyToDataTable ni AsDataView soportan tipos anónimos).

Sin embargo, me he encontrado con algunas situaciones delicadas.

Si el número de filas devueltas por la consulta Linq es 0, entonces CopyToDataTable no funcionará. Sin embargo, AsDataView no tiene problemas si la consulta no devolvió ningún registro.

clip_image001

Por otro lado, AsDataView, además de no llevarse bien con los tipos anónimos, tampoco se lleva bien con las proyecciones. Sin embargo, CopyToDataTable no tiene problemas con las proyecciones y funciona correctamente.

clip_image003

Por hoy nada más

Un saludo!

1 comentario:

  1. debo utilizar alguna libreria para utilizar CopyToDataTable y AsDataView

    ResponderEliminar