将模型导出到DataTable

时间:2017-03-02 08:53:23

标签: c# asp.net-mvc entity-framework linq

我想将我的模型数据转换为DataSetDataTable(以excel格式导出)

db.EMPs.ToList()

dbDataContextEMPsdataclass

如何将此列表导出到DataTable,我可以将行导出到Excel,但如何从标题中访问列名(不应在DataTable中手动添加列名)

3 个答案:

答案 0 :(得分:4)

您可以使用ToDataTable扩展方法,但需要先安装MoreLinq。要安装MoreLINQ,请在程序包管理器控制台中运行以下命令:

  

PM>安装包morelinq

然后将以下行添加到using指令中:

using MoreLinq;

最后,您可以使用ToDataTable扩展方法:

DataTable s = db.EMPs.ToDataTable();

答案 1 :(得分:2)

要快速创建可在Excel中读取的文件,您可以使用LINQ将内容映射到逗号分隔值列表,然后将数组保存到文件流中。

var records = db.EMP
                .ToList()
                .Select(record => $"\"{record.stringField}\",{record.numberField}")
                .ToArray();
File.WriteAllLines("file.csv", records);

答案 2 :(得分:0)

使用MoreLinq是将类转换为DataTable的最佳方法,如S.Akbari已经回答的那样 以下是我通过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);
}