2017-03-02 48 views
2

我想我的模型数据转换为DataSetDataTable(以Excel格式导出)导出模型到数据表

db.EMPs.ToList() 

dbDataContextEMPsdataclass

如何此列表导出到DataTable,我可以导出行到excel,但如何从包头访问列名(列名不应该手动添加在DataTable

回答

4

您可以使用ToDataTable扩展方法,但你首先需要安装MoreLinq。要安装MoreLINQ,在Package Manager控制台运行以下命令:

PM>安装,包装morelinq

然后将下面的行添加到您的using指令:

using MoreLinq; 

而且最后你可以用ToDataTable扩展方法:

DataTable s = db.EMPs.ToDataTable(); 
1

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

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

这是什么来完成这个stringField和numberField是指在这里? – Saurabh

+0

它显示
LINQ to Entities无法识别方法'System.String Format(System.String,System.Object,System.Object)'方法,并且此方法无法转换为存储表达式。 – Saurabh

+0

它是指示表中的字段是字符串或数字。字符串可以用引号括起来以方便Excel读取。 –

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); 
}