Esempio n. 1
0
        protected virtual async Task <ResponseApi> DefaultQuery(F query, int?page, int?size)
        {
            IQueryable <T> queryable = this.Query();
            //树形列表查询 无条件则可以 树形列表查询 有条件取消
            List <NHibernate.Criterion.AbstractCriterion> wheres = new List <NHibernate.Criterion.AbstractCriterion>();
            List <NHibernate.Criterion.AbstractCriterion> ands   = new List <NHibernate.Criterion.AbstractCriterion>();
            bool res    = this.QueryFilterByOr(ref wheres, query);
            bool andRes = this.QueryFilterByAnd(ands, query);

            if (andRes)
            {
                res = true;
            }
            List <T> data  = null;
            int      total = 0;

            if (res)
            {
                //模糊查询
                using (NHibernate.ISession session = HttpContext.RequestServices.GetService <NHibernate.ISession>())
                {
                    NHibernate.ICriteria criteria = session.CreateCriteria <T>();
                    NHibernate.Criterion.AbstractCriterion abstractCriterion = wheres.Any() ? wheres[0] : ands[0];
                    for (int i = wheres.Any() ? 0 : 1; i < ands.Count; i++)
                    {
                        abstractCriterion &= ands[i];
                    }
                    for (int i = 1; i < wheres.Count; i++)
                    {
                        abstractCriterion |= wheres[i];
                    }

                    criteria = criteria.Add(abstractCriterion);
                    NHibernate.ICriteria pageCriteria = (NHibernate.ICriteria)criteria.Clone();
                    total = pageCriteria.SetProjection(Projections.RowCount()).UniqueResult <int>();
                    OrderBy(ref criteria);
                    data = criteria.SetFirstResult((page.Value - 1) * size.Value).SetMaxResults(size.Value).List <T>().ToList();
                    //数据不规则整理成树形列表信息 如果断层了 断层的下级的成为上级
                    data = this.DataParseIfWhileReference(data, true);
                }
            }
            else
            {
                data  = this.QueryChildFilter(queryable, query).OrderBy(it => it.CreateDate).Skip((page.Value - 1) * size.Value).Take(size.Value).ToList();
                total = queryable.ToFutureValue(it => it.Count()).Value;
                //树形列表查询 去递归引用 automapper 才能正常运行 否则异常
                data = this.DataParseIfWhileReference(data);
            }
            ResultModel <G> result = new ResultModel <G>();

            result.Data   = data.Any() ? ObjectMapper.Map <List <G> >(data) : null;
            result.Result = new PageModel()
            {
                Total = total, Size = size.Value, Page = total == 0 ? 0 : total % size.Value == 0 ? total / size.Value : (total / size.Value + 1)
            };
            ResponseApi response = ResponseApi.Create(GetLanguage(), Code.QuerySuccess);

            response.Data = result;
            return(await Task.FromResult(response));
        }