将DataTable集合反射获取 List<M>
/// <summary> /// 根据DataTable集合反射获取 List<M> /// </summary> /// <typeparam name="M">泛型实体</typeparam> /// <param name="dt">DataTable</param> /// <returns>实体集合</returns> private static List<M> SetValueRow<M>(DataTable dt) where M : new() { List<M> list = new List<M>(); Type type; PropertyInfo p; M m; foreach (DataRow row in dt.Rows) { m = new M(); type = m.GetType(); foreach (DataColumn col in dt.Columns) { //获取一个字段的属性 p = type.GetProperty(col.ColumnName); //实体中无对应属性 if (p == null) continue; string colDbType = row[col.ColumnName].GetType().FullName; //结果集单元格中的值不为空时才赋值 if (colDbType != "System.DBNull") { switch (p.PropertyType.FullName) { case "System.Int64"://根据不同数据库数据类型作转换,如oracle的number(2)应转换为Int32,而不是默认的Decemal p.SetValue(m, Convert.ToInt64(row[col.ColumnName]), null); break; case "System.Int32": p.SetValue(m, Convert.ToInt32(row[col.ColumnName]), null); break; case "System.Int16": p.SetValue(m, Convert.ToInt16(row[col.ColumnName]), null); break; case "System.String": p.SetValue(m, Convert.ToString(row[col.ColumnName]), null); break; case "System.Decimal": p.SetValue(m, Convert.ToDecimal(row[col.ColumnName]), null); break; case "System.DateTime": p.SetValue(m, row[col.ColumnName], null); break; case "System.Double": p.SetValue(m, Convert.ToDouble(row[col.ColumnName]), null); break; case "System.Boolean": p.SetValue(m, Convert.ToBoolean(row[col.ColumnName]), null); break; case "System.Byte": p.SetValue(m, Convert.ToByte(row[col.ColumnName]), null); break; default: p.SetValue(m, row[col.ColumnName], null); break; } } } list.Add(m); } return list; }