(转载)DataTable与List<T>相互转换

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Linq;
 6 using System.Reflection;
 7 using System.Text;
 8 using System.Threading.Tasks;
 9  
10 namespace Common
11 {
12     public class ModelHelper
13     {
14         public static List<T> TableToEntity<T>(DataTable dt) where T : new()
15         {
16             List<T> lists = new List<T>();
17             if (dt.Rows.Count > 0)
18             {
19                 foreach (DataRow row in dt.Rows)
20                 {
21                     lists.Add(SetVal(new T(), row));
22                 }
23             }
24             return lists;
25         }
26  
27         public static T SetVal<T>(T entity, DataRow row) where T : new()
28         {
29             Type type = typeof(T);
30             PropertyInfo[] pi = type.GetProperties();
31             foreach (PropertyInfo item in pi)
32             {
33                 if (row[item.Name] != null && row[item.Name] != DBNull.Value)
34                 {
35                     if (item.PropertyType.IsGenericType && item.PropertyType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
36                     {
37                         Type conversionType = item.PropertyType;
38                         NullableConverter nullableConverter = new NullableConverter(conversionType);
39                         conversionType = nullableConverter.UnderlyingType;
40                         item.SetValue(entity, Convert.ChangeType(row[item.Name], conversionType), null);
41                     }
42                     else
43                     {
44                         item.SetValue(entity, Convert.ChangeType(row[item.Name], item.PropertyType), null);
45                     }
46                 }
47             }
48             return entity;
49         }
50  
51         public static DataTable EntityToDataTable<T>(List<T> list) where T : new()
52         {
53             if (list == null || list.Count == 0)
54             {
55                 return null;
56             }
57  
58             DataTable dataTable = new DataTable(typeof(T).Name);
59             foreach (PropertyInfo propertyInfo in typeof(T).GetProperties())
60             {
61                 if (propertyInfo.PropertyType.IsGenericType && propertyInfo.PropertyType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
62                 {
63                     Type conversionType = propertyInfo.PropertyType;
64                     NullableConverter nullableConverter = new NullableConverter(conversionType);
65                     conversionType = nullableConverter.UnderlyingType;
66                     dataTable.Columns.Add(new DataColumn(propertyInfo.Name, conversionType));
67                 }
68                 else
69                 {
70                     dataTable.Columns.Add(new DataColumn(propertyInfo.Name, propertyInfo.PropertyType));
71                 }
72             }
73  
74             foreach (T model in list)
75             {
76                 DataRow dataRow = dataTable.NewRow();
77                 foreach (PropertyInfo propertyInfo in typeof(T).GetProperties())
78                 {
79                     object value = propertyInfo.GetValue(model, null);
80                     if (value != null)
81                     {
82                         dataRow[propertyInfo.Name] = propertyInfo.GetValue(model, null);
83                     }
84                     else
85                     {
86                         dataRow[propertyInfo.Name] = DBNull.Value;
87                     }
88                 }
89                 dataTable.Rows.Add(dataRow);
90             }
91             return dataTable;
92         }
93     }
94 }
View Code

 

posted @ 2018-05-28 05:25  迷糊不糊  阅读(206)  评论(0编辑  收藏  举报