我想我的模型数据转换为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读取。 –