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 ReadOnlyCollection <DbOrderExpression> VisitOrderBy( ReadOnlyCollection <DbOrderExpression> expressions) { if (expressions != null) { List <DbOrderExpression> alternate = null; for (int i = 0, n = expressions.Count; i < n; i++) { DbOrderExpression expr = expressions[i]; Expression e = Visit(expr.Expression); if (alternate == null && e != expr.Expression) { alternate = expressions.Take(i).ToList(); } if (alternate != null) { alternate.Add(new DbOrderExpression(expr.OrderType, e)); } } if (alternate != null) { return(alternate.AsReadOnly()); } } return(expressions); }
public static DbSelectExpression AddOrderExpression(this DbSelectExpression select, DbOrderExpression ordering) { List <DbOrderExpression> orderby = new List <DbOrderExpression>(); if (select.OrderBy != null) { orderby.AddRange(select.OrderBy); } orderby.Add(ordering); return(select.SetOrderBy(orderby)); }
public static DbSelectExpression RemoveOrderExpression(this DbSelectExpression select, DbOrderExpression ordering) { if (select.OrderBy != null && select.OrderBy.Count > 0) { List <DbOrderExpression> orderby = new List <DbOrderExpression>(select.OrderBy); orderby.Remove(ordering); return(select.SetOrderBy(orderby)); } return(select); }
public static DbSelectExpression RemoveOrderExpression(this DbSelectExpression select, DbOrderExpression ordering) { if (select.OrderBy != null && select.OrderBy.Count > 0) { List<DbOrderExpression> orderby = new List<DbOrderExpression>(select.OrderBy); orderby.Remove(ordering); return select.SetOrderBy(orderby); } return select; }
public static DbSelectExpression AddOrderExpression(this DbSelectExpression select, DbOrderExpression ordering) { List<DbOrderExpression> orderby = new List<DbOrderExpression>(); if (select.OrderBy != null) orderby.AddRange(select.OrderBy); orderby.Add(ordering); return select.SetOrderBy(orderby); }