我想将我的模型数据转换为DataSet
或DataTable
(以excel格式导出)
db.EMPs.ToList()
db
为DataContext
,EMPs
为dataclass
。
如何将此列表导出到DataTable
,我可以将行导出到Excel,但如何从标题中访问列名(不应在DataTable
中手动添加列名)
答案 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);
}