DataTable转换泛型集合 实体类
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 }