c# - tutorial - Modelo de exportación a DataTable
mvc entity framework relationships (3)
Quiero convertir mis datos de modelo a DataSet
o DataTable
(para exportar en formato excel)
db.EMPs.ToList()
db
es DataContext
, EMPs
es dataclass
.
Cómo exportar esta lista a DataTable
, puedo exportar filas a Excel pero cómo acceder al nombre de la columna desde el encabezado (el nombre de columna no se debe agregar manualmente en DataTable
)
El uso de MoreLinq
es la mejor forma de convertir una clase a DataTable
como ya respondió S.Akbari. A continuación, se muestra otra forma de hacerlo mediante el uso de System.Reflection
List<EMP> list= db.EMPs.ToList();
DataTable dt = new DataTable();
PropertyInfo[] Props = typeof(EMP).GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (PropertyInfo prop in Props)
{
//Setting column names as Property names
dt.Columns.Add(prop.Name);
}
foreach (EMP e in list)
{
var values = new object[Props.Length];
for (int i = 0; i < Props.Length; i++)
{
//inserting property values to datatable rows
values[i] = Props[i].GetValue(e, null);
}
dt.Rows.Add(values);
}
Para crear rápidamente un archivo que se pueda leer en Excel, puede asignar los contenidos a una lista de valores separados por comas usando LINQ y luego guardar la matriz en una secuencia de archivos.
var records = db.EMP
.ToList()
.Select(record => $"/"{record.stringField}/",{record.numberField}")
.ToArray();
File.WriteAllLines("file.csv", records);
Puede usar el método de extensión ToDataTable
pero primero debe instalar MoreLinq . Para instalar MoreLINQ
, ejecute el siguiente comando en la consola del Administrador de paquetes:
PM> Install-Package morelinq
A continuación, agregue la siguiente línea a sus directivas de using
:
using MoreLinq;
Y finalmente puedes usar el método de extensión ToDataTable
:
DataTable s = db.EMPs.ToDataTable();