2009-12-20 40 views
3

如何投放表的LINQ到數據表鑄造

System.Data.Linq.Table<T>System.Data.DataTable

 DemoDBDataContext context = new DemoDBDataContext(); 
     DataSet ds = new DataSet(); 
     var query = context.Customers; 
     ds.Tables[0] = query; 

如何做到這一點?分配

ds.Tables[0] = query; 

它拋出

屬性或索引System.Data.DataTableCollection.this[int]不能分配給它是隻讀的。

回答

7

你不能投了System.Data.Linq.Table到DataTable,但你可以隨便寫上IEnumerable的擴展方法將其轉換爲一個DataTable:

public static DataTable ToDataTable<T>(this IEnumerable<T> items) 
{ 
    var tb = new DataTable(typeof(T).Name); 
     PropertyInfo[] props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance); 
    foreach(var prop in props) 
    { 
     tb.Columns.Add(prop.Name, prop.PropertyType); 
    } 

    foreach (var item in items) 
    { 
     var values = new object[props.Length]; 
     for (var i=0; i<props.Length; i++) 
     { 
      values[i] = props[i].GetValue(item, null); 
     } 

     tb.Rows.Add(values); 
    } 
    return tb; 
} 

來源: http://www.chinhdo.com/20090402/convert-list-to-datatable/

+0

對不起,延遲response.It工作,並感謝您的鏈接。 – Zaromia