2013-08-16 83 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