Esempio n. 1
0
 protected override Expression VisitSelect(SelectExpression select)
 {
     select = (SelectExpression)base.VisitSelect(select);
     if (select.Skip != null)
     {
         Expression       expression3;
         SelectExpression sel = select.SetSkip(null).SetTake(null);
         if (select.IsDistinct || ((select.GroupBy != null) && (select.GroupBy.Count != 0)))
         {
             sel = sel.AddRedundantSelect(this.language, new TableAlias());
         }
         QueryType columnType = this.language.TypeSystem.GetColumnType(typeof(int));
         sel = sel.AddColumn(new ColumnDeclaration("row__num", new RowNumberExpression(select.OrderBy), columnType)).AddRedundantSelect(this.language, new TableAlias());
         sel = sel.RemoveColumn(sel.Columns.Single <ColumnDeclaration>(c => c.Name == "row__num"));
         TableAlias       alias      = ((SelectExpression)sel.From).Alias;
         ColumnExpression expression = new ColumnExpression(typeof(int), columnType, alias, "row__num");
         if (select.Take != null)
         {
             expression3 = new BetweenExpression(expression, Expression.Add(select.Skip, Expression.Constant(1)), Expression.Add(select.Skip, select.Take));
         }
         else
         {
             expression3 = expression.GreaterThan(select.Skip);
         }
         if (sel.Where != null)
         {
             expression3 = sel.Where.And(expression3);
         }
         select = sel.SetWhere(expression3);
     }
     return(select);
 }
Esempio n. 2
0
 protected override Expression VisitSelect(SelectExpression selectExpression)
 {
     selectExpression = (SelectExpression)base.VisitSelect(selectExpression);
     if (((selectExpression.Skip != null) && (selectExpression.Take != null)) && (selectExpression.OrderBy.Count > 0))
     {
         Expression skip        = selectExpression.Skip;
         Expression take        = selectExpression.Take;
         Expression expression3 = PartialEvaluator.Eval(Expression.Add(skip, take));
         selectExpression = selectExpression.SetTake(expression3).SetSkip(null);
         selectExpression = selectExpression.AddRedundantSelect(this.language, new TableAlias());
         selectExpression = selectExpression.SetTake(take);
         selectExpression = (SelectExpression)OrderByRewriter.Rewrite(this.language, selectExpression);
         IEnumerable <OrderExpression> orderBy = from ob in selectExpression.OrderBy select new OrderExpression((ob.OrderType == OrderType.Ascending) ? OrderType.Descending : OrderType.Ascending, ob.Expression);
         selectExpression = selectExpression.SetOrderBy(orderBy);
         selectExpression = selectExpression.AddRedundantSelect(this.language, new TableAlias());
         selectExpression = selectExpression.SetTake(Expression.Constant(0));
         selectExpression = (SelectExpression)OrderByRewriter.Rewrite(this.language, selectExpression);
         IEnumerable <OrderExpression> enumerable2 = from ob in selectExpression.OrderBy select new OrderExpression((ob.OrderType == OrderType.Ascending) ? OrderType.Descending : OrderType.Ascending, ob.Expression);
         selectExpression = selectExpression.SetOrderBy(enumerable2);
         selectExpression = selectExpression.SetTake(null);
     }
     return(selectExpression);
 }