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));
        }
		private AbstractCriterion Process(AbstractCriterion criterion)
		{
			if (this.isNot)
			{
				return Restrictions.Not(criterion);
			}
			return criterion;
		}
Esempio n. 3
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="propertyName"></param>
        /// <param name="values"></param>
        public XmlIn(string propertyName, IEnumerable values) {
            _propertyName = propertyName;

            var list = new ArrayList();
            foreach(object val in values)
                list.Add(val);
            _values = list.ToArray();

            _expr = Restrictions.In(propertyName, list);
        }
Esempio n. 4
0
        /// <summary>
        /// Create ICriterion for (some) subquery expression using lambda syntax
        /// </summary>
        /// <param name="expression">lambda expression</param>
        /// <returns>NHibernate.ICriterion.AbstractCriterion</returns>
        public static AbstractCriterion WhereSome(Expression <Func <bool> > expression)
        {
            AbstractCriterion criterion = ExpressionProcessor.ProcessSubquery(LambdaSubqueryType.Some, expression);

            return(criterion);
        }
Esempio n. 5
0
        /// <summary>
        /// Create ICriterion for (all) subquery expression using lambda syntax
        /// </summary>
        /// <typeparam name="T">type of property</typeparam>
        /// <param name="expression">lambda expression</param>
        /// <returns>NHibernate.ICriterion.AbstractCriterion</returns>
        public static AbstractCriterion WhereAll <T>(Expression <Func <T, bool> > expression)
        {
            AbstractCriterion criterion = ExpressionProcessor.ProcessSubquery <T>(LambdaSubqueryType.All, expression);

            return(criterion);
        }
Esempio n. 6
0
	    public XmlIn(string propertyName, IEnumerable values)
		{
			this.propertyName = propertyName;
			ArrayList arrayList = new ArrayList();
			foreach (object o in values)
			{
				arrayList.Add(o);
			}
			this.values = arrayList.ToArray();
			expr = Expression.In(propertyName, arrayList);
		}
		private static AbstractCriterion GetRightSide(AbstractCriterion criterion)
		{
			return (AbstractCriterion) GetField("_rhs", typeof(LogicalExpression)).GetValue(criterion);
		}