2013-08-16 79 views
0

我使用实体框架与Linq一起从数据库中获取我的数据。 我想将这些数据下载到excel中。 ExcelLibrary与数据集一起工作。 是否有可能获得Linq数据集中的数据,所以我可以很容易地获得一个Excel中的数据?Linq结果到数据集

我试过这个,但是这当然不起作用。

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); 
    } 
+1

您是否尝试过使用'System.Data.DataTableExtensions.CopyToDataTable()' – Nilesh

+0

我想:VAR查询=从u在db.v_Checklist选择U; DataTable table = query.CopyToDataTable(); CopyToDataTable不存在。因为查询不是数据行... – Freddy

回答

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; 
    } 
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); 
} 
+0

当我尝试copytodatatable时出现此错误。类型'x.v_Checklist'不能用作泛型类型或方法'System.Data.DataTableExtensions.CopyToDataTable中的类型参数'T' Freddy