Example #1
0
        /// <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);
        }
Example #2
0
 public PropertyBridge(PropertyInfo property)
 {
     this.propertyInfo   = property;
     dynamicPropertyInfo = ReflectionManager.CreateDynamicProperty(property);
 }