利用反射把Datatable转换成List
Posted yinjinli
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用反射把Datatable转换成List相关的知识,希望对你有一定的参考价值。
/// 利用反射将Datatable转换为List<T>对象 /// </summary> /// <typeparam name="T">集合</typeparam> /// <param name="dt"> datatable对象</param> /// <returns></returns> public List<T> DataTableToList<T>(DataTable dt) where T : new () { //定义集合 List<T> ts = new List<T>(); //定义一个临时变量 string tempName = string .Empty; //遍历dataTable中的数据行 foreach (DataRow dr in dt.Rows) { T t = new T(); //获得此模型的公共属性 PropertyInfo[] propertys = t.GetType().GetProperties(); //遍历该对象的所有属性 foreach (PropertyInfo pi in propertys) { tempName = pi.Name; //将属性名称赋值给临时变量 //检查datatable是否包含此列(列名==对象的属性名) if (dt.Columns.Contains(tempName)) { //取值 object value = dr[tempName]; //如果非空,则赋给对象的属性 if (value != DBNull.Value) { //这里添加判断的原因:比如double转folat不能隐式转换,而枚举类型又不能使用Convert.ChangeType if (pi.PropertyType.IsEnum) { pi.SetValue(t, value, null ); } else { //ChangeType属于强转可能存在数据丢失,但是pi.PropertyType是对应你类成员的类型 pi.SetValue(t, Convert.ChangeType(value, pi.PropertyType), null ); } } } } //对象添加到泛型集合中 ts.Add(t); } return ts; } |
|
以上是关于利用反射把Datatable转换成List的主要内容,如果未能解决你的问题,请参考以下文章