2017-03-02 41 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); 
}