首页 > 代码库 > 将DataTable转换为List<T>对象遇到问题:类型“System.Int64”的对象无法转换为类型“System.Int32”。
将DataTable转换为List<T>对象遇到问题:类型“System.Int64”的对象无法转换为类型“System.Int32”。
可以利用反射将DataTable转换为List<T>对象:原始链接http://www.jb51.net/article/67386.htm
但是该方法在DataTable里某个字段类型是Int32会有问题,报异常:类型“System.Int64”的对象无法转换为类型“System.Int32”。
可在赋值的时候加一句:
if(pi.GetMethod.ReturnParameter.ParameterType.Name == "Int32")
{
value = http://www.mamicode.com/Convert.ToInt32(value);
}
pi.SetValue(t, value, null);
整体代码:
1 /// <summary> 2 /// 利用反射将DataTable转换为List<T>对象 3 /// </summary> 4 /// <param name="dt">DataTable 对象</param> 5 /// <returns>List<T>集合</returns> 6 public static List<T> DataTableToList<T>(DataTable dt) where T : class, new() 7 { 8 // 定义集合 9 List<T> ts = new List<T>(); 10 //定义一个临时变量 11 string tempName = string.Empty; 12 //遍历DataTable中所有的数据行 13 foreach (DataRow dr in dt.Rows) 14 { 15 T t = new T(); 16 // 获得此模型的公共属性 17 PropertyInfo[] propertys = t.GetType().GetProperties(); 18 //遍历该对象的所有属性 19 foreach (PropertyInfo pi in propertys) 20 { 21 tempName = pi.Name;//将属性名称赋值给临时变量 22 //检查DataTable是否包含此列(列名==对象的属性名) 23 if (dt.Columns.Contains(tempName)) 24 { 25 //取值 26 object value =http://www.mamicode.com/ dr[tempName]; 27 //如果非空,则赋给对象的属性 28 if (value != DBNull.Value) 29 { 30 if (pi.GetMethod.ReturnParameter.ParameterType.Name == "Int32") 31 { 32 value =http://www.mamicode.com/ Convert.ToInt32(value); 33 } 34 pi.SetValue(t, value, null); 35 } 36 } 37 } 38 //对象添加到泛型集合中 39 ts.Add(t); 40 } 41 return ts; 42 }
其他类型转换汇总
1 public static List<T> ToList<T>(this DataTable dt) where T:class,new() 2 { 3 Type t=typeof(T); 4 PropertyInfo[] propertys = t.GetProperties(); 5 List<T> lst = new List<T>(); 6 string typeName = string.Empty; 7 foreach (DataRow dr in dt.Rows) 8 { 9 T entity = new T(); 10 foreach (PropertyInfo pi in propertys) 11 { 12 typeName = pi.Name; 13 if (dt.Columns.Contains(typeName)) 14 { 15 if (!pi.CanWrite) continue; 16 object value =http://www.mamicode.com/ dr[typeName]; 17 if (value =http://www.mamicode.com/= DBNull.Value) continue; 18 if (pi.PropertyType == typeof(string)) 19 { 20 pi.SetValue(entity,value.ToString(),null); 21 } 22 else if (pi.PropertyType == typeof(int) || pi.PropertyType == typeof(int?)) 23 { 24 pi.SetValue(entity,int.Parse(value.ToString()), null); 25 } 26 else if (pi.PropertyType == typeof(DateTime?) || pi.PropertyType == typeof(DateTime)) 27 { 28 pi.SetValue(entity, DateTime.Parse(value.ToString()), null); 29 } 30 else if (pi.PropertyType == typeof(float)) 31 { 32 pi.SetValue(entity, float.Parse(value.ToString()), null); 33 } 34 else if (pi.PropertyType == typeof(double)) 35 { 36 pi.SetValue(entity, double.Parse(value.ToString()), null); 37 } 38 else 39 { 40 pi.SetValue(entity,value, null); 41 } 42 } 43 } 44 lst.Add(entity); 45 } 46 return lst; 47 }
将DataTable转换为List<T>对象遇到问题:类型“System.Int64”的对象无法转换为类型“System.Int32”。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。