2014-02-10 14 views
4

正在寻找,并就如何动态列表转换为databale, C#,请指教开裂我的大脑,感谢转换的动态列表,数据表C#

List<dynamic>dlist=new List<dynamic> 

DataTable 
+0

你的意思是,项目中的每个属性/字段都应该成为数据表中的列?如果'dlist'中的每个项目都是不同类型的呢?最重要的是:你已经尝试过了什么?显示你的努力。 – MarcinJuraszek

回答

3

以下是可以将任何列表对象转换为数据表的方法..

public DataTable ConvertToDataTable<T>(IList<T> data) 
    { 
     PropertyDescriptorCollection properties = 
      TypeDescriptor.GetProperties(typeof(T)); 
     DataTable table = new DataTable(); 
     foreach (PropertyDescriptor prop in properties) 
      table.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType); 
     foreach (T item in data) 
     { 
      DataRow row = table.NewRow(); 
      foreach (PropertyDescriptor prop in properties) 
       row[prop.Name] = prop.GetValue(item) ?? DBNull.Value; 
      table.Rows.Add(row); 
     } 
     return table; 

    } 

http://social.msdn.microsoft.com/Forums/vstudio/en-US/6ffcb247-77fb-40b4-bcba-08ba377ab9db/converting-a-list-to-datatable?forum=csharpgeneral

+5

不适用于列表 Xilmiki

0

使用此功能,

public static DataTable ConvertToDatatable<T>(this IList<T> data) 
{ 
    PropertyDescriptorCollection props = 
     TypeDescriptor.GetProperties(typeof(T)); 
    DataTable table = new DataTable(); 
    for(int i = 0 ; i < props.Count ; i++) 
    { 
     PropertyDescriptor prop = props[i]; 
     table.Columns.Add(prop.Name, prop.PropertyType); 
    } 
    object[] values = new object[props.Count]; 
    foreach (T item in data) 
    { 
     for (int i = 0; i < values.Length; i++) 
     { 
      values[i] = props[i].GetValue(item); 
     } 
     table.Rows.Add(values); 
    } 
    return table;   
    } 
+0

不适用于列表

1
public DataTable ToDataTable<T>(dynamic items) 
    { 

     DataTable dtDataTable = new DataTable(); 
     if (items.Count == 0) return dtDataTable; 

     ((IEnumerable)items[0]).Cast<dynamic>().Select(p => p.Name).ToList().ForEach(col => { dtDataTable.Columns.Add(col); }); 

     ((IEnumerable)items).Cast<dynamic>().ToList(). 
      ForEach(data => 
      { 
       DataRow dr = dtDataTable.NewRow(); 
       ((IEnumerable)data).Cast<dynamic>().ToList().ForEach(Col => { dr[Col.Name] = Col.Value; }); 
       dtDataTable.Rows.Add(dr); 
      }); 
     return dtDataTable; 
    } 
+0

这工作对我来说,虽然我不得不交换“名称”的“钥匙”,因为我的枚举包含KeyValuePair –