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.
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.
Por hoy nada más
Un saludo!
debo utilizar alguna libreria para utilizar CopyToDataTable y AsDataView
ResponderEliminar