Example #1
0
        public static IQueryable AppendWhere(IQueryable src, CriteriaOperator op)
        {
            var converter = new CriteriaToExpressionConverter();

            if (object.ReferenceEquals((object)op, (object)null))
            {
                return(src);
            }
            ParameterExpression thisExpression = Expression.Parameter(src.ElementType, "");
            Expression          expression     =
                Expression.Quote(Expression.Lambda(converter.Convert(thisExpression, op),
                                                   new ParameterExpression[1] {
                thisExpression
            }));
            MethodCallExpression methodCallExpression =
                Expression.Call(typeof(Queryable), "Where",
                                new Type[1] {
                src.ElementType
            }, new Expression[2]
            {
                src.Expression, expression
            });

            return(src.Provider.CreateQuery(methodCallExpression));
        }
Example #2
0
 protected override Expression VisitMethodCall(MethodCallExpression node)
 {
     if (node.Method.Name == "Where")
     {
         var converter   = new CriteriaToExpressionConverter();
         var elementType = node.Method.ReturnType.GetGenericArguments()[0];
         ParameterExpression thisExpression = Expression.Parameter(elementType);
         var criteria = DataServiceQueryCriteriaVisitor.Prepare(_filter);
         if (criteria is FunctionOperator && criteria.ToString().Contains("IsPriorDays"))
         {
             var            priorDays    = (FunctionOperator)criteria;
             BinaryOperator prirOperator = new BinaryOperator();
             prirOperator.LeftOperand = priorDays.Operands[1];
             int timeSpan = int.Parse(priorDays.Operands[2].ToString()) * (-1);
             prirOperator.RightOperand = new ConstantValue(DateTime.Now.AddDays(timeSpan));
             prirOperator.OperatorType = BinaryOperatorType.Less;
             criteria = prirOperator;
         }
         else if (criteria is GroupOperator && criteria.ToString().Contains("IsPriorDays"))
         {
             var            groupOperator = (GroupOperator)criteria;
             var            priorDays     = (FunctionOperator)groupOperator.Operands[0];
             BinaryOperator prirOperator  = new BinaryOperator();
             prirOperator.LeftOperand = priorDays.Operands[1];
             int timeSpan = int.Parse(priorDays.Operands[2].ToString()) * (-1);
             prirOperator.RightOperand = new ConstantValue(DateTime.Now.AddDays(timeSpan));
             prirOperator.OperatorType = BinaryOperatorType.Less;
             criteria = prirOperator;
         }
         var        expression       = Expression.Lambda(converter.Convert(thisExpression, criteria), thisExpression);
         Expression filterExpression = Expression.Quote(expression);
         return(Expression.Call(node.Method, node, filterExpression));
     }
     return(base.VisitMethodCall(node));
 }
Example #3
0
        public Expression Convert(ParameterExpression thisExpression, DevExpress.Data.Filtering.CriteriaOperator op)
        {
            var        converter  = new CriteriaToExpressionConverter();
            Expression expression = converter.Convert(thisExpression, op);

            var visitor = new NullPropagationEraseViistor();

            return(visitor.Visit(expression));
        }