1 /// <summary>
2 /// 将DataTable数据源转换成实体类
3 /// </summary>
4 public static List<T> ConvertToModel<T>(DataTable dt)
5 {
6 if (dt==null)
7 {
8 return null;
9 }
10 var list = new List<T>();
11 var plist = new List<PropertyInfo>(typeof(T).GetProperties());
12 foreach (DataRow item in dt.Rows)
13 {
14 T s = Activator.CreateInstance<T>();
15 for (int i = 0; i < dt.Columns.Count; i++)
16 {
17 PropertyInfo info = plist.Find(p => p.Name == dt.Columns[i].ColumnName);
18 if (info != null)
19 {
20 try
21 {
22 if (!Convert.IsDBNull(item[i]))
23 {
24 object v = null;
25 if (info.PropertyType.ToString().Contains("System.Nullable"))
26 {
27 v = Convert.ChangeType(item[i], Nullable.GetUnderlyingType(info.PropertyType));
28 }
29 else
30 {
31 v = Convert.ChangeType(item[i], info.PropertyType);
32 }
33 info.SetValue(s, v, null);
34 }
35 }
36 catch (Exception ex)
37 {
38 throw new Exception("字段[" + info.Name + "]转换出错," + ex.Message);
39 }
40 }
41 }
42 list.Add(s);
43 }
44 return list;
45 }