public static T ReaderToModel <T>(IDataReader dr) { T result; try { try { if (dr.Read()) { List <string> list = new List <string>(dr.FieldCount); for (int i = 0; i < dr.FieldCount; i++) { list.Add(dr.GetName(i).ToLower()); } T model = Activator.CreateInstance <T>(); PropertyInfo[] properties = model.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.GetProperty); for (int j = 0; j < properties.Length; j++) { PropertyInfo pi = properties[j]; if (list.Contains(pi.Name.ToLower())) { if (!ReaderToIListHelper.IsNullOrDBNull(dr[pi.Name])) { pi.SetValue(model, ReaderToIListHelper.HackType(dr[pi.Name], pi.PropertyType), null); } } } result = model; return(result); } } finally { if (dr != null) { dr.Dispose(); } } result = default(T); } catch (Exception ex) { throw ex; } return(result); }
public static List <T> ReaderToList <T>(IDataReader dr) { List <T> result; try { List <string> field = new List <string>(dr.FieldCount); for (int i = 0; i < dr.FieldCount; i++) { field.Add(dr.GetName(i).ToLower()); } List <T> list = new List <T>(); while (dr.Read()) { T model = Activator.CreateInstance <T>(); PropertyInfo[] properties = model.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.GetProperty); for (int j = 0; j < properties.Length; j++) { PropertyInfo property = properties[j]; if (field.Contains(property.Name.ToLower())) { if (!ReaderToIListHelper.IsNullOrDBNull(dr[property.Name])) { property.SetValue(model, ReaderToIListHelper.HackType(dr[property.Name], property.PropertyType), null); } } } list.Add(model); } result = list; } finally { if (dr != null) { dr.Dispose(); } } return(result); }