/// <summary> /// convert to object list. /// </summary> public static List <T> GetList <T>(DbDataReader dbReader, Data.DirverType attrDirverType = Data.DirverType.UnKnown) { List <T> lst = new List <T>(); var type = typeof(T); var typeInfo = ReflectionCacheManager.Instance.GetAndSet(type); var noArgument = new object[] { }; var col2PropDics = AttributeHelper.GetColumn2PropNameDics(attrDirverType, type); List <IDynamicPropertyInfo> propQueue = new List <IDynamicPropertyInfo>(); List <int> indexs = new List <int>(); while (dbReader.Read()) { lock (lockSync) { T instance = (T)typeInfo.DynamicConstructorInfo.Invoke(noArgument); if (propQueue.Count != 0) { int getIndex = 0; foreach (var columnIndex in indexs) { var prop = propQueue[getIndex++]; object dbValue = dbReader.GetValue(columnIndex); object value = TypeConverter.To(prop.ObjectType, dbValue); prop.SetValue(instance, value, null); } } else { for (int columnIndex = 0; columnIndex < dbReader.FieldCount; columnIndex++) { string dbColumnName = dbReader.GetName(columnIndex); if (!col2PropDics.ContainsKey(dbColumnName)) { continue; } string propertyName = col2PropDics[dbColumnName]; if (!typeInfo.DynamicPropertyDics.ContainsKey(propertyName)) { continue; } indexs.Add(columnIndex); IDynamicPropertyInfo prop = typeInfo.DynamicPropertyDics[propertyName]; propQueue.Add(prop); object dbValue = dbReader.GetValue(columnIndex); object value = TypeConverter.To(prop.ObjectType, dbValue); prop.SetValue(instance, value, null); } } lst.Add(instance); } } #if NETFRAMEWORK dbReader.Close(); #endif dbReader.Dispose(); return(lst); }
public PropertyBridge(PropertyInfo property) { this.propertyInfo = property; dynamicPropertyInfo = ReflectionManager.CreateDynamicProperty(property); }