public GroupingQueryOrdering(LambdaExpression keySelector, DbOrderType orderType) { this._keySelector = keySelector; this._orderType = orderType; }
public DbOrderExpression(DbOrderType orderType, Expression expression) { _orderType = orderType; _expression = expression; }
protected virtual Expression BindThenBy(Expression source, LambdaExpression orderSelector, DbOrderType orderType) { if (this.thenBys == null) { this.thenBys = new List <DbOrderExpression>(); } this.thenBys.Add(new DbOrderExpression(orderType, orderSelector)); return(this.Visit(source)); }
public DbOrdering(DbExpression expression, DbOrderType orderType) { this._expression = expression; this._orderType = orderType; }
protected virtual Expression BindOrderBy(Type resultType, Expression source, LambdaExpression orderSelector, DbOrderType orderType) { List <DbOrderExpression> myThenBys = this.thenBys; this.thenBys = null; DbProjectionExpression projection = this.VisitSequence(source); this.map[orderSelector.Parameters[0]] = projection.Projector; List <DbOrderExpression> orderings = new List <DbOrderExpression>(); orderings.Add(new DbOrderExpression(orderType, this.Visit(orderSelector.Body))); if (myThenBys != null) { for (int i = myThenBys.Count - 1; i >= 0; i--) { DbOrderExpression tb = myThenBys[i]; LambdaExpression lambda = (LambdaExpression)tb.Expression; this.map[lambda.Parameters[0]] = projection.Projector; orderings.Add(new DbOrderExpression(tb.OrderType, this.Visit(lambda.Body))); } } var alias = this.GetNextAlias(); ProjectedColumns pc = this.ProjectColumns(projection.Projector, alias, projection.Select.Alias); return(new DbProjectionExpression( new DbSelectExpression(alias, pc.Columns, projection.Select, null, orderings.AsReadOnly(), null), pc.Projector )); }
protected virtual Expression BindThenBy(Expression source, LambdaExpression orderSelector, DbOrderType orderType) { if (this.thenBys == null) { this.thenBys = new List<DbOrderExpression>(); } this.thenBys.Add(new DbOrderExpression(orderType, orderSelector)); return this.Visit(source); }
protected virtual Expression BindOrderBy(Type resultType, Expression source, LambdaExpression orderSelector, DbOrderType orderType) { List<DbOrderExpression> myThenBys = this.thenBys; this.thenBys = null; DbProjectionExpression projection = this.VisitSequence(source); this.map[orderSelector.Parameters[0]] = projection.Projector; List<DbOrderExpression> orderings = new List<DbOrderExpression>(); orderings.Add(new DbOrderExpression(orderType, this.Visit(orderSelector.Body))); if (myThenBys != null) { for (int i = myThenBys.Count - 1; i >= 0; i--) { DbOrderExpression tb = myThenBys[i]; LambdaExpression lambda = (LambdaExpression)tb.Expression; this.map[lambda.Parameters[0]] = projection.Projector; orderings.Add(new DbOrderExpression(tb.OrderType, this.Visit(lambda.Body))); } } var alias = this.GetNextAlias(); ProjectedColumns pc = this.ProjectColumns(projection.Projector, alias, projection.Select.Alias); return new DbProjectionExpression( new DbSelectExpression(alias, pc.Columns, projection.Select, null, orderings.AsReadOnly(), null), pc.Projector ); }
/// <summary> /// 分页查询 /// </summary> /// <typeparam name="T">实体类型</typeparam> /// <typeparam name="TKey">排序主键类型</typeparam> /// <param name="includeProperty">要深度查询的属性名称集合</param> /// <param name="predicate">条件表达式</param> /// <param name="pageIndex">查询目标页数</param> /// <param name="pageSize">分页大小</param> /// <param name="total">满足查询条件的总记录数</param> /// <param name="orderKey">排序表达式</param> /// <param name="order">排序类型</param> /// <returns>IQueryable</returns> public IQueryable <T> Query <T, TKey>(IEnumerable <string> includeProperty, Expression <Func <T, bool> > predicate, int pageIndex, int pageSize, out int total, Expression <Func <T, TKey> > orderKey, DbOrderType order = DbOrderType.Asc) where T : class { try { if (pageIndex <= 0) { pageIndex = 1; } var query = this.Set <T>().AsNoTracking().AsQueryable(); if (predicate != null) { query = query.Where(predicate); } total = query.Count(); if (includeProperty != null) { foreach (var include in includeProperty) { query = query.Include(include); } } if (pageSize <= 0) { return(query); } if (order == DbOrderType.Asc) { query = query.OrderBy(orderKey); } else { query = query.OrderByDescending(orderKey); } query = query.Skip((pageIndex - 1) * pageSize).Take(pageSize); return(query); } catch (Exception ex) { throw this.AnalyzeException(ex); } }
/// <summary> /// 分页查询 /// </summary> /// <typeparam name="T">实体类型</typeparam> /// <typeparam name="TKey">排序主键类型</typeparam> /// <param name="predicate">条件表达式</param> /// <param name="pageIndex">查询目标页数</param> /// <param name="pageSize">分页大小</param> /// <param name="total">满足查询条件的总记录数</param> /// <param name="orderKey">排序表达式</param> /// <param name="order">排序类型</param> /// <returns>IQueryable</returns> public IQueryable <T> Query <T, TKey>(Expression <Func <T, bool> > predicate, int pageIndex, int pageSize, out int total, Expression <Func <T, TKey> > orderKey, DbOrderType order = DbOrderType.Asc) where T : class { return(this.Query <T, TKey>(null, predicate, pageIndex, pageSize, out total, orderKey, order)); }