Exemple #1
0
        public virtual SortBuilder <T> OrderBy(string orderByClause)
        {
            if (string.IsNullOrEmpty(orderByClause))
            {
                throw new ArgumentNullException("orderByClause");
            }

            if (!orderByClause.ToUpper().Contains("ORDER BY "))
            {
                orderByClause = orderByClause.Insert(0, " ORDER BY ");
            }

            SortBuilder.OrderBy(orderByClause);
            return(SortBuilder);
        }
Exemple #2
0
 /// <summary>
 /// Handles Where.
 /// </summary>
 /// <param name="lambdaExpression"></param>
 /// <returns></returns>
 protected override Expression VisitLamda(LambdaExpression lambdaExpression)
 {
     _sortBuilder = Where(lambdaExpression as Expression <Func <T, bool> >);
     return(base.VisitLamda(lambdaExpression));
 }
Exemple #3
0
 public virtual SortBuilder <T> ThenByDescending(Expression <Func <T, object> > sortExpression)
 {
     SortBuilder.OrderByDescending(sortExpression);
     return(SortBuilder);
 }
Exemple #4
0
 public virtual SortBuilder <T> ThenBy(Expression <Func <T, object> > sortExpression, SortDirection sortDirection)
 {
     SortBuilder.OrderBy(sortExpression, sortDirection);
     return(SortBuilder);
 }
Exemple #5
0
 public virtual SortBuilder <T> OrderBy(Expression <Func <T, object> > sortExpression)
 {
     SortBuilder.OrderBy(sortExpression);
     return(SortBuilder);
 }
        /// <summary>
        /// Handles OrderBy.
        /// </summary>
        /// <param name="expression"></param>
        /// <returns></returns>
        protected override System.Linq.Expressions.Expression VisitMethodCall(MethodCallExpression expression)
        {
            switch (expression.Method.Name)
            {
            case "Where":
                var quote = expression.Arguments[1] as UnaryExpression;
                if (quote != null)
                {
                    var predicate = quote.Operand as Expression <Func <TEntity, bool> >;
                    _sortBuilder = _queryBuilder.Where(predicate);
                }
                break;

            case "OrderBy":
            case "ThenBy":

                this.Visit(expression.Arguments[0]);

                var keySelectorAsc = expression.Arguments[1] as UnaryExpression;
                if (keySelectorAsc != null)
                {
                    if (_sortBuilder == null)
                    {
                        _sortBuilder = _queryBuilder.AddSortExpression(keySelectorAsc.Operand, SortDirection.Asc);
                    }
                    else
                    {
                        _sortBuilder.AddSortExpression(keySelectorAsc.Operand, SortDirection.Asc);
                    }
                }
                break;

            case "OrderByDescending":
            case "ThenByDescending":

                this.Visit(expression.Arguments[0]);

                var keySelectorDesc = expression.Arguments[1] as UnaryExpression;
                if (keySelectorDesc != null)
                {
                    if (_sortBuilder == null)
                    {
                        _sortBuilder = _queryBuilder.AddSortExpression(keySelectorDesc.Operand, SortDirection.Desc);
                    }
                    else
                    {
                        _sortBuilder.AddSortExpression(keySelectorDesc.Operand, SortDirection.Desc);
                    }
                }
                break;

            case "Skip":
                this.Visit(expression.Arguments[0]);
                int skipVal = (int)GetConstantValue(expression.Arguments[1]);
                _queryBuilder.Skip(skipVal);
                break;

            case "Take":
                this.Visit(expression.Arguments[0]);
                int takeVal = (int)GetConstantValue(expression.Arguments[1]);
                _queryBuilder.Take(takeVal);
                break;

            case "FirstOrDefault":
            case "SingleOrDefault":
                this.Visit(expression.Arguments[0]);
                _queryBuilder.SetSingleOrFirstAllowNull(true);
                break;

            case "First":
            case "Single":
                this.Visit(expression.Arguments[0]);
                _queryBuilder.SetSingleOrFirstAllowNull(false);
                break;

            default:
                string msg = string.Format("'{0}' expressions are not currently supported in the where clause expression tree parser.", expression.Method.Name);
                throw new NotSupportedException(msg);
            }

            return(expression);
        }