Пример #1
0
        /// <summary>
        /// 从reader读取数据并映射到类型type的类这里要求Type必须有一个默认的无参构造函数并且返回指定类型的集合
        /// </summary>
        /// <param name="type">要映射的类型</param>
        /// <param name="convertType">要转换到的类型</param>
        /// <param name="reader">IdataReader</param>
        /// <returns>IEnumerable</returns>
        public static IEnumerable ToEnumerable(Type type, Type convertType, IDataReader reader)
        {
            var list = System.Activator.CreateInstance(typeof(List <>).MakeGenericType(convertType)) as IList;

            var binding = ModelBindingHelper.GetBinding(type, reader, string.Empty);

            using (reader)
            {
                while (reader.Read())
                {
                    var obj = ActivatorHelper.CreateInstance(type);
                    var o   = binding.Bind(obj);

                    if (Cac.ContainsKey(type.FullName + convertType.FullName))
                    {
                        var co = Cac[type.FullName + convertType.FullName];
                        list.Add(co(obj));
                    }
                    else
                    {
                        var paramobj = Expression.Parameter(typeof(object), "obj");
                        var covert   = Expression.Convert(paramobj, convertType);
                        var lambda   = Expression.Lambda <Func <object, object> >(covert, paramobj);

                        var co = lambda.Compile();
                        Cac.Add(type.FullName + convertType.FullName, co);

                        list.Add(co(obj));
                    }
                }
            }

            return(list);
        }
Пример #2
0
 public static object ToModel(Type type, IDataReader reader, string prefix = "")
 {
     using (reader)
     {
         if (reader.Read())
         {
             var obj = ActivatorHelper.CreateInstance(type);
             return(BindModel(obj, reader, prefix));
         }
     }
     return(null);
 }
Пример #3
0
        /// <summary>
        /// 从reader读取数据并映射到类型type的类这里要求Type必须有一个默认的无参构造函数
        /// 也可以是Type可是是如List(Student) 这种类型 但是Student类型必须是有无参构造函数的类
        /// </summary>
        /// <param name="type">要映射的类型System.Type</param>
        /// <param name="reader">IDataReader</param>
        /// <param name="prefix"></param>
        /// <returns>IEnumerable</returns>
        public static IEnumerable ToEnumerable(Type type, IDataReader reader, string prefix = "")
        {
            IList list      = null;
            Type  modelType = null;
            bool  isArry    = false;

            //直接接收泛型类型
            if (type.IsGenericType && typeof(IList).IsAssignableFrom(type))
            {
                list      = ActivatorHelper.CreateInstance(type) as IList;
                modelType = type.GetGenericArguments()[0];
            }
            else if (typeof(Array).IsAssignableFrom(type))
            {
                isArry    = true;
                modelType = type.GetElementType();
            }
            else
            {
                list      = ActivatorHelper.CreateInstance(typeof(List <>).MakeGenericType(type)) as IList;
                modelType = type;
            }

            var binding = ModelBindingHelper.GetBinding(modelType, reader, string.Empty);

            binding.Prefix = prefix;

            using (reader)
            {
                while (reader.Read())
                {
                    var obj = ActivatorHelper.CreateInstance(modelType);
                    var o   = binding.Bind(obj);

                    list.Add(o);
                }
            }

            return(list);
        }