DataTable 转Model的办法
看到这个问题,大家也许都会用 model.属性名称=dt.Rows[0]["列名"];的方法去赋值给model;也许datatable的列并不全部包含model的全部属性,那么还要做一步判断了;
这样做可以做到把datatable的列的值赋给model,那么假如model里有100多个属性,岂不是十分臃肿。肯定有很好的解决方法,这个时候就是反射(Reflection)的好处了。
在使用反射的时候需要引用 using System.Reflection;
/// <summary> /// 转换工具类 /// </summary> /// <typeparam name="T">约束泛型,约束类型T必须具有无参的构造函数</typeparam> public static class ConvertTools<T> where T : new() { /// <summary> /// 填充对象列表:用DataTable填充实体类 /// </summary> public List<T> FillModel(DataTable dt) { //datatable没有数据 返回null if (dt == null || dt.Rows.Count == 0) { return null; } //model的容器 List<T> modelList = new List<T>(); //datatable可能有很多行数据,遍历每一行 foreach (DataRow dr in dt.Rows) { //model类型 T model = new T(); for (int i = 0; i < dr.Table.Columns.Count; i++) { //发现datatable的列属性 PropertyInfo propertyInfo = model.GetType().GetProperty(dr.Table.Columns[i].ColumnName); if (propertyInfo != null && dr[i] != DBNull.Value) //用索引值设置属性值 propertyInfo.SetValue(model, dr[i], null); } modelList.Add(model); } return modelList; } }
有了反射这么强大的工具,那么 DataRow转model,model转datatable、DataRow不都很容易了。