1 /// <summary>
2 /// 单表查询结果转换成泛型集合 --实体类的字段名 需要与DataTable的列名一致
3 /// </summary>
4 /// <typeparam name="T">泛型集合类型</typeparam>
5 /// <param name="dt">查询结果DataTable</param>
6 /// <returns>以实体类为元素的泛型集合</returns>
7 public static IList<T> convertToList<T>(DataTable dt) where T : new()
8 {
9 // 定义集合
10 List<T> ts = new List<T>();
11
12 // 获得此模型的类型
13 Type type = typeof(T);
14 //定义一个临时变量
15 string tempName = string.Empty;
16 //遍历DataTable中所有的数据行
17 foreach (DataRow dr in dt.Rows)
18 {
19 T t = new T();
20 // 获得此模型的公共属性
21 PropertyInfo[] propertys = t.GetType().GetProperties();
22 //遍历该对象的所有属性
23 foreach (PropertyInfo pi in propertys)
24 {
25 tempName = pi.Name;//将属性名称赋值给临时变量
26 //检查DataTable是否包含此列(列名==对象的属性名)
27 if (dt.Columns.Contains(tempName))
28 {
29 // 判断此属性是否有Setter
30 if (!pi.CanWrite) continue;//该属性不可写,直接跳出
31 //取值
32 object value = dr[tempName];
33 //如果非空,则赋给对象的属性
34 if (value != DBNull.Value)
35 pi.SetValue(t, value, null);
36 }
37 }
38 //对象添加到泛型集合中
39 ts.Add(t);
40 }
41 return ts;
42 }