C# IList转为DataTable

public class WebUtil
{
/// <summary>
/// 转换IList<T>为DataTable /// </summary> /// <typeparam name="T">泛型类型</typeparam> /// <param name="list">泛型List集合</param> /// <returns>Datatable 对象</returns> public static DataTable ConvertToDataTable<T>(IList<T> list)
 {
DataTable table = CreateTable<T>();
 
   Type entityType = typeof(T); 
   PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(entityType); 
   
 
   foreach (T item in list) 
   
 {
DataRow row = table.NewRow();
 
   foreach (PropertyDescriptor prop in properties) 
   
 {
 row[prop.Name] = prop.GetValue(item);
 }
 
   
 table.Rows.Add(row);
 }
 
   return table; 
   
 }
 
   public static DataTable CreateTable<T>() 
   
 {
Type entityType = typeof(T); DataTable table = new DataTable(entityType.Name); PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(entityType);
 
   
 
   foreach (PropertyDescriptor prop in properties) 
   
 {
//解决 DataSet不支持System.Nullable<>”的异常 Type colType = prop.PropertyType; if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof(Nullable<>)))
 {
 colType = colType.GetGenericArguments()[0];
 }
 table.Columns.Add(prop.Name, colType);
 }
 
   return table; 
   
 }
}

 

//在调用上面的那个类的方法时出现 “DataSet不支持System.Nullable<>”的异常。下面是调用的方式。

IList<PersonInfo> list = GetPersonInfoList();//这是我的列表获取方法。。这里没问题的!!有数据得到!
var dt = WebUtil.ConvertTo<PersonInfo>(list);

你可能感兴趣的:(Datatable)