public static TResult ToModel <TResult>(this DataRow row) where TResult : class, new() { if (row == null) { return(null); } DataTable dt = row.Table; //创建一个属性的列表 List <PropertyInfo> prlist = new List <PropertyInfo>(); //获取TResult的类型实例 反射的入口 Type t = typeof(TResult); //获得TResult 的所有的Public 属性 并找出TResult属性和DataTable的列名称相同的属性(PropertyInfo) 并加入到属性列表 Array.ForEach <PropertyInfo>(t.GetProperties(), p => { if (dt.Columns.IndexOf(p.Name) != -1) { prlist.Add(p); } }); //创建返回的集合 List <TResult> oblist = new List <TResult>(); //创建TResult的实例 TResult ob = new TResult(); //找到对应的数据 并赋值 prlist.ForEach(p => { if (row[p.Name] != DBNull.Value) { Type dataType = row[p.Name].GetType(); switch (dataType.Name) { case "MySqlDateTime": p.SetValue(ob, TryConvertUtil.ToDateTime(row[p.Name]), null); break; default: p.SetValue(ob, row[p.Name], null); break; } } }); //放入到返回的集合中. return(ob); }
public static List <TResult> ToList <TResult>(this DataTable dt) where TResult : class, new() { if (dt == null) { return(null); } //创建一个属性的列表 List <PropertyInfo> prlist = new List <PropertyInfo>(); //获取TResult的类型实例 反射的入口 Type t = typeof(TResult); //获得TResult 的所有的Public 属性 并找出TResult属性和DataTable的列名称相同的属性(PropertyInfo) 并加入到属性列表 Array.ForEach <PropertyInfo>(t.GetProperties(), p => { if (dt.Columns.IndexOf(p.Name) != -1) { prlist.Add(p); } }); //创建返回的集合 List <TResult> oblist = new List <TResult>(); foreach (DataRow row in dt.Rows) { //创建TResult的实例 TResult ob = new TResult(); //找到对应的数据 并赋值 prlist.ForEach(p => { if (row[p.Name] != DBNull.Value) { Type dataType = row[p.Name].GetType(); switch (dataType.Name) { case "MySqlDateTime": p.SetValue(ob, TryConvertUtil.ToDateTime(row[p.Name]), null); break; case "Int64": case "Int32": { if (p.PropertyType == typeof(bool)) { p.SetValue(ob, TryConvertUtil.ToInt(row[p.Name]) == 1, null); } else { p.SetValue(ob, TryConvertUtil.ToInt(row[p.Name]), null); } break; } default: p.SetValue(ob, row[p.Name], null); break; } } }); //放入到返回的集合中. oblist.Add(ob); } return(oblist); }