我想我的模型數據轉換爲DataSet
或DataTable
(以Excel格式導出)導出模型到數據表
db.EMPs.ToList()
db
是DataContext
,EMPs
是dataclass
。
如何此列表導出到DataTable
,我可以導出行到excel,但如何從包頭訪問列名(列名不應該手動添加在DataTable
)
我想我的模型數據轉換爲DataSet
或DataTable
(以Excel格式導出)導出模型到數據表
db.EMPs.ToList()
db
是DataContext
,EMPs
是dataclass
。
如何此列表導出到DataTable
,我可以導出行到excel,但如何從包頭訪問列名(列名不應該手動添加在DataTable
)
您可以使用ToDataTable
擴展方法,但你首先需要安裝MoreLinq。要安裝MoreLINQ
,在Package Manager控制檯運行以下命令:
PM>安裝,包裝morelinq
然後將下面的行添加到您的using
指令:
using MoreLinq;
而且最後你可以用ToDataTable
擴展方法:
DataTable s = db.EMPs.ToDataTable();
要快速創建可以在Excel中讀取的文件,可以使用LINQ將內容映射到逗號分隔值列表,然後將該數組保存到文件流中。
var records = db.EMP
.ToList()
.Select(record => $"\"{record.stringField}\",{record.numberField}")
.ToArray();
File.WriteAllLines("file.csv", records);
使用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);
}
這是什麼來完成這個stringField和numberField是指在這裏? – Saurabh
它顯示
LINQ to Entities無法識別方法'System.String Format(System.String,System.Object,System.Object)'方法,並且此方法無法轉換爲存儲表達式。 – Saurabh
它是指示表中的字段是字符串或數字。字符串可以用引號括起來以方便Excel讀取。 –