Ejemplo n.º 1
0
        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
                       ));
        }
Ejemplo n.º 2
0
        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);
 }