Exemplo n.º 1
0
        public object Any(QueryTitles query)
        {
            var q     = AutoQuery.CreateQuery(query, base.Request);
            var words = query.NameQuery.Split(' ');
            var count = 0;

            foreach (string word in words)
            {
                var w = word;

                if (w.Contains("^") && count == 0)
                {
                    q.And(q2 => q2.Name.StartsWith(w.Substring(1)));
                }
                else if (w.Contains("--"))
                {
                    q.And(q2 => q2.Name.Contains(w.Substring(2)));
                }
                else
                {
                    q.And(q2 => q2.Name.Contains(w));
                }

                count++;
            }

            return(AutoQuery.Execute(new QueryTitles(), q));
        }
    public override object Exec <From>(IQuery <From> dto)
    {
        var q       = AutoQuery.CreateQuery(dto, Request);
        var session = base.SessionAs <CustomUserSession>();

        q.And("CustomerId = {0}", session.CustomerId);
        return(AutoQuery.Execute(dto, q));
    }
Exemplo n.º 3
0
        [CacheResponse(Duration = 60, MaxAge = 30)]  //前30秒返回缓存数据   后30秒回校验数据是否改变
        public object Get(OperationRecords request)
        {
            var query  = AutoQuery.CreateQuery(request, Request);
            var result = AutoQuery.Execute(request, query);

            //return new HttpResult(result)
            //{
            //    ResultScope = () =>
            //        JsConfig.With(new Config { IncludeNullValues = true, ExcludeDefaultValues = true })
            //};

            return(result);
        }
Exemplo n.º 4
0
        /// <summary>
        /// 基于 AutoQuery 实现统一的业务表动态查询。
        /// <see cref="http://docs.servicestack.net/autoquery-rdbms"/>
        /// </summary>
        /// <param name="query">包含显示表名及隐式的其它查询条件</param>
        /// <exception cref="UserFriendlyException"></exception>
        public async Task <IQueryResponse> Get(GetBizs query)
        {
            if (string.IsNullOrEmpty(query.TableName))
            {
                throw new UserFriendlyException("表参数不能为空。");
            }

            if (!query.TableName.StartsWith("biz_"))
            {
                throw new UserFriendlyException("只能查询业务表。");
            }

            // 根据表名得到表结构,并且根据表结构动态生成实体
            var entityType = await CreateBizType(query.TableName);

            // 动态生成用于 AutoQuery 的请求对象, 必须继承自 QueryDb<>
            // TODO: 通过设置 NamedConnection 可以自动实现分库的查询
            var routeBaseType = typeof(QueryDb <>).MakeGenericType(entityType);
            var routeType     = await ReflectionManage.CreateEntityType(new EntityDef
            {
                Name       = $"{query.TableName}_route",
                BaseType   = routeBaseType,
                Properties = Enumerable.Empty <EntityProperty>()
            });

            var queryObj = Activator.CreateInstance(routeType);

            // 设置分页参数
            if (query.Skip.HasValue && query.Take.HasValue)
            {
                ((QueryBase)queryObj).Skip = query.Skip;
                ((QueryBase)queryObj).Take = query.Take;
            }

            if (!string.IsNullOrEmpty(query.OrderBy))
            {
                ((QueryBase)queryObj).OrderBy = query.OrderBy;
            }

            if (!string.IsNullOrEmpty(query.OrderByDesc))
            {
                ((QueryBase)queryObj).OrderByDesc = query.OrderByDesc;
            }

            // 调用 AutoQuery 实现动态表查询
            var q      = AutoQuery.CreateQuery((IQueryDb)queryObj, Request.GetRequestParams(), Request);
            var result = AutoQuery.Execute((IQueryDb)queryObj, q);

            return(await Task.FromResult(result));
        }
        public override object Exec <From, Into>(IQueryDb <From, Into> dto)
        {
            var q = AutoQuery.CreateQuery(dto, Request.GetRequestParams(), base.Request);

            return(AutoQuery.Execute(dto, q, base.Request));
        }
Exemplo n.º 6
0
        public override object Exec <From>(IQuery <From> dto)
        {
            var q = AutoQuery.CreateQuery(dto, Request.GetRequestParams());

            return(AutoQuery.Execute(dto, q));
        }