Beispiel #1
0
        public static List <T> GetList(IDataReader reader)
        {
            List <T>          list    = new List <T>();
            EntityBuilder <T> builder = EntityBuilder <T> .CreateBuilder(reader);

            while (reader.Read())
            {
                T model = default(T);
                model = builder.Build(reader);
                list.Add(model);
            }
            return(list);
        }
Beispiel #2
0
        public static List <T> GetList <T>(PageInfo <T> model)
        {
            if (string.IsNullOrWhiteSpace(model.StrSelect))
            {
                model.StrSelect = "*";
            }
            if (model.Config == null)
            {
                throw new Exception("Config不能为空!");
            }
            if (string.IsNullOrWhiteSpace(model.StrFrom))
            {
                throw new Exception("StrFrom不能为空!");
            }
            if (string.IsNullOrWhiteSpace(model.StrOrder))
            {
                throw new Exception("StrOrder不能为空!");
            }

            var getModel = model.GetModel;
            var list     = new List <T>();

            using (var db = new DbBuilder(model.Config))
            {
                string sql         = "select count(1) as tcount from (" + model.StrFrom + ") where 1=1 " + model.StrWhere;
                var    recordCount = (int)new DbBuilder(model.Config).GetSingle(sql, model.Parameters);
                sql = SqlHelper.GetSqlString(model.StrFrom, model.PageSize, model.PageIndex, recordCount, "*", model.StrWhere, model.StrOrder, model.Config);
                var reader = db.GetDataReader(sql, model.Parameters);
                if (getModel != null)
                {
                    while (reader.Read())
                    {
                        list.Add(getModel(reader));
                    }
                }
                else
                {
                    var builder = EntityBuilder <T> .CreateBuilder(reader);

                    while (reader.Read())
                    {
                        list.Add(builder.Build(reader));
                    }
                }
            }
            return(list);
        }
Beispiel #3
0
        public BaseMapper <T> SortAsc <TResult>(Expression <Func <T, TResult> > field)
        {
            if (_SortBuilder == null)
            {
                _SortBuilder = new StringBuilder();
            }
            var fieldName = EntityBuilder.GetPropertyName <T, TResult>(field);

            if (_isOrderBy == false)
            {
                _SortBuilder.Append(string.Concat(" [", fieldName, "] asc"));
                _isOrderBy = true;
            }
            else
            {
                _SortBuilder.Append(string.Concat(",[", fieldName, "] asc"));
            }
            return(this);
        }
Beispiel #4
0
        public static EntityBuilder <T> CreateBuilder(IDataRecord dataRecord)
        {
            EntityBuilder <T> dynamicBuilder = new EntityBuilder <T>();

            DynamicMethod method    = new DynamicMethod("DynamicCreate", typeof(T), new Type[] { typeof(IDataRecord) }, typeof(T), true);
            ILGenerator   generator = method.GetILGenerator();

            LocalBuilder result = generator.DeclareLocal(typeof(T));

            generator.Emit(OpCodes.Newobj, typeof(T).GetConstructor(Type.EmptyTypes));
            generator.Emit(OpCodes.Stloc, result);

            for (int i = 0; i < dataRecord.FieldCount; i++)
            {
                PropertyInfo propertyInfo = typeof(T).GetProperty(dataRecord.GetName(i));
                Label        endIfLabel   = generator.DefineLabel();

                if (propertyInfo != null && propertyInfo.GetSetMethod() != null)
                {
                    generator.Emit(OpCodes.Ldarg_0);
                    generator.Emit(OpCodes.Ldc_I4, i);
                    generator.Emit(OpCodes.Callvirt, isDBNullMethod);
                    generator.Emit(OpCodes.Brtrue, endIfLabel);

                    generator.Emit(OpCodes.Ldloc, result);
                    generator.Emit(OpCodes.Ldarg_0);
                    generator.Emit(OpCodes.Ldc_I4, i);
                    generator.Emit(OpCodes.Callvirt, getValueMethod);
                    generator.Emit(OpCodes.Unbox_Any, dataRecord.GetFieldType(i));
                    generator.Emit(OpCodes.Callvirt, propertyInfo.GetSetMethod());

                    generator.MarkLabel(endIfLabel);
                }
            }

            generator.Emit(OpCodes.Ldloc, result);
            generator.Emit(OpCodes.Ret);

            dynamicBuilder.handler = (Load)method.CreateDelegate(typeof(Load));
            return(dynamicBuilder);
        }
Beispiel #5
0
 public string ExpField <TResult>(Expression <Func <T, TResult> > field)
 {
     return(EntityBuilder.GetPropertyName <T, TResult>(field));
 }