我将实体框架与Linq一起使用,以便从数据库中获取数据。 我想将这些数据下载到excel中。 ExcelLibrary使用数据集。 是否有可能在数据集中获取Linq数据,因此我可以轻松地获取Excel中的数据?
我试过这个,但当然这不起作用。
protected void btnExcelCheckListDownload_Click(object sender, EventArgs e)
{
DataSet dsTest = new DataSet();
var db = new BillingEntities();
var query = (from u in db.v_Checklist select u).AsQueryable();
dsTest = (DataSet)query.Select(u => u.NCR_ID).Distinct();
ExcelLibrary.DataSetHelper.CreateWorkbook("MyExcelFile.xls", dsTest);
}
答案 0 :(得分:2)
尝试使用 CopyToDataTable
protected void btnExcelCheckListDownload_Click(object sender, EventArgs e)
{
DataSet dsTest = new DataSet();
var db = new BillingEntities();
var query = (from u in db.v_Checklist select u).AsQueryable();
DataTable dt = query.CopyToDataTable();
dsTest.Tables.Add(dt);
ExcelLibrary.DataSetHelper.CreateWorkbook("MyExcelFile.xls", dsTest);
}
答案 1 :(得分:1)
您可以使用反射编写自己的ToDatatable扩展。跟随之类的事情。根据您的需要,您可能希望扩展它。
public static class ConvertToDatatable
{
public static DataTable ToDataTable<T>(this IEnumerable<T> enumerable)
{
if (enumerable == null) throw new ArgumentException("enumerable");
var dt = new DataTable();
var es = enumerable as List<T> ?? enumerable.ToList();
var first = es.First();
if (first != null)
{
var props = first.GetType().GetProperties();
foreach (var propertyInfo in props)
{
if (!propertyInfo.PropertyType.IsClass || propertyInfo.PropertyType.Name.Equals("String"))
{
dt.Columns.Add(new DataColumn(propertyInfo.Name));
}
}
}
foreach (var e in es)
{
var props = e.GetType().GetProperties();
DataRow dr = dt.NewRow();
dt.Rows.Add(dr);
foreach (var propertyInfo in props)
{
if (!propertyInfo.PropertyType.IsClass || propertyInfo.PropertyType.Name.Equals("String"))
{
dr[propertyInfo.Name] = propertyInfo.GetValue(e);
}
}
}
return dt;
}