Exemplo n.º 1
0
        private Expression ConstructWhereExpr(ParameterExpression startParam, QueryRequestParam param)
        {
            Expression expr = Expression.Constant(true);

            int idx = 0;

            foreach (var filter in param.Filters)
            {
                if (!ValidateField(startParam, filter.FieldName))
                {
                    continue;
                }

                Expression e    = null;
                var        func = QueryExpression.GetExprDelegate(filter.Operator);
                e = func(startParam, filter.FieldName, filter.Value);

                if (idx == 0)
                {
                    expr = e;
                }
                else
                {
                    expr = Expression.And(expr, e);
                }

                idx++;
            }

            return(expr);
        }
Exemplo n.º 2
0
        private void InitPageLimit(QueryRequestParam param)
        {
            int pageSize = param.PageSize;

            limit = pageSize;
            if (limit > maxPageLimit)
            {
                limit = maxPageLimit;
                LogUtils.LogWarning(GetLogger(), "Adjusted page size from [{0}] to [{1}]!!!]", pageSize, limit);
            }

            if (limit <= 0)
            {
                limit = maxPageLimit;
                LogUtils.LogWarning(GetLogger(), "Adjusted page size from [{0}] to [{1}]!!!]", pageSize, limit);
            }
        }
Exemplo n.º 3
0
        protected bool GetListOperationWithNoParameter <T>(string db, string provider, TestOperationParam param) where T : BaseModel
        {
            CreateOnixDbContext(db, provider);

            bool ok  = true;
            var  opr = CreateGetListOperation(param.GetListName);

            try
            {
                QueryRequestParam  qrp      = new QueryRequestParam();
                QueryResponseParam response = opr.Apply(qrp);
            }
            catch
            {
                ok = false;
            }

            return(ok);
        }
Exemplo n.º 4
0
        public QueryResponseParam Apply(QueryRequestParam param)
        {
            InitPageLimit(param);

            queryParam = param;
            context    = GetDatabaseContext();

            Type mt = GetModelType();
            ParameterExpression startParam = Expression.Parameter(mt);
            var expr = ConstructWhereExpr(startParam, param);

            int totalRec = GetTotalRecord(startParam, expr);

            QueryResponseParam qrp = new QueryResponseParam();

            qrp.Results = new List <BaseModel>();

            var results = Query(startParam, expr);

            results = ApplyOrderBy(results, mt, param);

            if (param.ByChunk)
            {
                results    = ApplyLimitOffset(results, param);
                qrp.PageNo = param.PageNo;
            }

            foreach (var r in results)
            {
                qrp.Results.Add(r);
            }

            qrp.RecordCount = qrp.Results.Count;
            qrp.TotalRecord = totalRec;
            qrp.TotalPage   = GetTotalPage(totalRec);

            return(qrp);
        }
Exemplo n.º 5
0
        protected QueryResponseParam GetListOperationWithParameter <T>(string db, string provider, TestOperationParam param, QueryRequestParam qrp) where T : BaseModel
        {
            QueryResponseParam response = null;
            var opr = CreateGetListOperation(param.GetListName);

            response = opr.Apply(qrp);

            return(response);
        }
Exemplo n.º 6
0
        private IQueryable <BaseModel> ApplyOrderBy(IQueryable <BaseModel> query, Type type, QueryRequestParam param)
        {
            var expression = query.Expression;

            int cnt = 0;

            foreach (var order in param.OrderBy)
            {
                var    parameter = Expression.Parameter(type, "m");
                string command   = GetOrderCommand(cnt, order.Order);

                var property = type.GetProperty(order.FieldName);

                if (property == null)
                {
                    LogUtils.LogWarning(GetLogger(), "Property [{0} not found!!!]", order.FieldName);
                    continue;
                }

                var propertyAccess    = Expression.MakeMemberAccess(parameter, property);
                var orderByExpression = Expression.Lambda(propertyAccess, parameter);

                expression = Expression.Call(
                    typeof(Queryable),
                    command,
                    new Type[] { type, property.PropertyType },
                    expression,
                    orderByExpression);

                cnt++;
            }

            return(query.Provider.CreateQuery <BaseModel>(expression));
        }
Exemplo n.º 7
0
        private IQueryable <BaseModel> ApplyLimitOffset(IQueryable <BaseModel> query, QueryRequestParam param)
        {
            int currentChunk = param.PageNo;

            if (currentChunk <= 0)
            {
                currentChunk = 1;
            }

            int offset = ((currentChunk - 1) * limit);

            var qr = query.Skip(offset).Take(limit);

            return(qr);
        }