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 }