Convertir un IEnumerable a DataTable en C#

Es posible convertir un IEnumerable a DataTable en C# después de llenarla mediante una consulta LINQ, utilizando el método CopyToDataTable.

.Net tiene un método que facilita convertir un IEnumerable a DataTable mediante la captura de las filas guardadas.

Convertir a DataTable

Tenemos el siguiente IEnumerable que se llena a partir de una consulta LINQ.

IEnumerable<DataRow> ieRegistro = from fila in tablaUno.AsEnumerable()
                                where fila.Field<int>("Numero") == 1
                                select fila;

Podría interesarte Consulta LINQ en un DataTable con C#  

Declaramos una variable de tipo DataTable.

DataTable tablados = new DataTable();

Realizamos la transferencia del contenido del IEnumerable al DataTable.

tablaDos = ieRegistro.CopyToDataTable<DataRow>();

Resumiendo, tenemos el código completo:

IEnumerable<DataRow> ieRegistro = from fila in tablaUno.AsEnumerable() where fila.Field<int>("Numero") == 1 select fila;
DataTable tablaDos = new DataTable();
tablados = ieRegistro.CopyToDataTable<DataRow>();
Convertir un IEnumerable a DataTable en C#

Consideraciones

Hay que tener en cuenta que al convertir un IEnumerable a DataTable debemos asegurarnos de que el IEnumerable tenga datos.

¿Por qué?, si el IEnumerable está vacío provocará un error de compilación.

Error de IEnumerable vacio

Te recomiendo leer el post de validación de IEnumerable vacío, para evitar el error anterior.

Podría interesarte Agregar datos a un DataTable en C#  

Al aplicar la validación el código puede quedar como sigue:

IEnumerable<DataRow> ieRegistro = from fila in tablaUno.AsEnumerable() where fila.Field<int>("Numero") == 1 select fila;
DataTable tablaDos = new DataTable();
if(IsIENumerableLleno(ieRegistro)){
    tablados = ieRegistro.CopyToDataTable<DataRow>();
}

En caso de que el IEnumerable este vacío puedes mandar un mensaje o realizar otra operación para los resultados.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *