DataTable and List collection conversion

For database query data conversion, batch data operation conversion, import and export Excel conversion

1  public  static  class DataTableHelper
 2  {
 3      ///  <summary> 
4      /// Convert DataTable object to List object
 5      ///  </summary> 
6      ///  <typeparam name="T"> Metadata type <// typeparam> 
7      ///  <param name="table"> DataTable type object </param> 
8      ///  <returns> Return List object </returns> 
9      public  static IList<T> ConvertTo<T>(DataTable table)
10     {
11         if (table == null)
12             return null;
13 
14         List<DataRow> rows = table.Rows.Cast<DataRow>().ToList();
15 
16         return ConvertTo<T>(rows);
17     }
18 
19     public static IList<T> ConvertTo<T>(IList<DataRow> rows)
20     {
21         IList<T> list = new List<T>();
22         if (rows != null)
23         {
24             foreach (DataRow row in rows.Cast<DataRow>().ToList())
25             {
26                 T obj = default(T);
27                 obj = Activator.CreateInstance<T>();
28                 foreach (DataColumn column in row.Table.Columns)
29                 {
30                     var columnName = column.ColumnName;
31                     var prop = obj.GetType().GetProperty(columnName);
32                     if (prop == null) continue;
33                     var value = (row[columnName] is DBNull) ? null: row[columnName];
 34                      if (prop.CanWrite)
 35                          prop.SetValue(obj, value, null );
 36                  }
 37                  list.Add(obj);
 38              }
 39          }
 40          return list;
 41      }
 42  
43      ///  <summary> 
44      /// Convert IList object to DataTable
 45      ///  </summary> 
46      ///  <typeparam name="T"> type </typeparam> 
47      ///  <param name="list"> source data</param>
48     /// <returns>返回DataTable</returns>
49     public static DataTable ConvertTo<T>(IList<T> list)
50     {
51         DataTable dt = new DataTable();
52         if (list.Count == 0)
53             return dt;
54 
55         //创建table类型
56         var t=Activator.CreateInstance<T>();
57         dt.TableName = typeof(T).Name;
58 
59         PropertyInfo[] props=t.GetType().GetProperties();
60         foreach (PropertyInfo p in props)
61         {
62             string propName = p.Name;
63             Type propType=p.PropertyType;
64 
65             if (p.PropertyType.IsGenericType && p.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>))
66             {
67                 propType = p.PropertyType.GetGenericArguments()[0];
68             }
69             dt.Columns.Add(propName,propType);
70         }
71 
72         //赋值
73         foreach (var item in list)
74         {
75             DataRow row = dt.NewRow();
76             foreach (PropertyInfo p in props)
77             { 
78                 var propValue=p.GetValue(item,null);
79                 row[p.Name] = propValue;
80             }
81             dt.Rows.Add(row);
82         }
83 
84         return dt;
85     }
86 }

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325098625&siteId=291194637