你的位置:首页 > ASP.net教程

[ASP.net教程]DataTable转换为Model实体对象


  记得在学校的时候,接触得最多的就是SqlHelper,每次在读取的时候不管是DataTable还是DataReader转换为实体对象的时候是最恼火的,因为要写很多代码,而且没有什么意义。后面接触到了反射,于是查了下资料也写了个已经烂大街的DataTable转换为Model实体对象

 

 1 public static IEnumerable<T> DataTableToModels<T>(this DataTable dt) where T : class, new() 2     { 3       //判断datatable是否有值 4       if (dt.Columns.Count < 1 || dt.Rows.Count < 1) yield return default(T); 5       //获取实体类中所有公开的属性,并且筛选出在datatable中存在的列 6       var propertyInfos = from propertyInfo in typeof(T).GetProperties() 7                 where dt.Columns.Contains(propertyInfo.Name) 8                 select propertyInfo; 9       //循环设置属性10       foreach (DataRow dr in dt.Rows)//遍历dt中所有行11       {12         var result = new T();13         foreach (var p in propertyInfos)//遍历所有属性14         {15           try16           {17             p.SetValue(result, dr[p.Name], null);18           }19           catch (System.Exception)20           {21 22             throw;23           }24         }25         yield return result;26       }27 28     }

 

需要注意的是DataTable.Columns.Contains和赋值给定Name时是不区分大小写的!