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>();
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.
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.