示例#1
0
        protected override Expression VisitMethodCall(MethodCallExpression node)
        {
            Expression expression = node;

            if (node.Method.Name == "Contains")
            {
                var visitor = new SpContainsExpressionVisitor <TContext>(SpQueryArgs);
                visitor.Visit(expression);
                Operator = visitor.Operator;
            }
            else if (node.Method.Name == "StartsWith")
            {
                var visitor = new SpStartsWithExpressionVisitor <TContext>(SpQueryArgs);
                visitor.Visit(expression);
                Operator = visitor.Operator;
            }
            else if (node.Method.Name == "DateRangesOverlap" && typeof(ListItemEntityExtensions).IsAssignableFrom(node.Method.DeclaringType))
            {
                var visitor = new SpDateRangesOverlapExpressionVisitor <TContext>(SpQueryArgs);
                visitor.Visit(expression);
                Operator = visitor.Operator;
            }
            else if (node.Method.Name == "Includes" && typeof(ListItemEntityExtensions).IsAssignableFrom(node.Method.DeclaringType))
            {
                var visitor = new SpIncludesExpressionVisitor <TContext>(SpQueryArgs);
                visitor.Visit(expression);
                Operator = visitor.Operator;
            }
            else if ((node.Method.Name == "LookupIncludes" || node.Method.Name == "LookupIdIncludes") && typeof(ListItemEntityExtensions).IsAssignableFrom(node.Method.DeclaringType))
            {
                var visitor = new SpLookupIncludesExpressionVisitor <TContext>(SpQueryArgs);
                visitor.Visit(expression);
                Operator = visitor.Operator;
            }
            else if ((node.Method.Name == "LookupNotIncludes" || node.Method.Name == "LookupIdNotIncludes") && typeof(ListItemEntityExtensions).IsAssignableFrom(node.Method.DeclaringType))
            {
                var visitor = new SpLookupNotIncludesExpressionVisitor <TContext>(SpQueryArgs);
                visitor.Visit(expression);
                Operator = visitor.Operator;
            }
            else if ((node.Method.Name == "IsMembership") && typeof(ListItemEntityExtensions).IsAssignableFrom(node.Method.DeclaringType))
            {
                var visitor = new SpIsMembershipExpressionVisitor <TContext>(SpQueryArgs);
                visitor.Visit(expression);
                Operator = visitor.Operator;
            }
            if (node.Method.Name == "Equals")
            {
                var visitor = new SpComparisonExpressionVisitor <TContext>(SpQueryArgs);
                visitor.Visit(expression);
                Operator = visitor.Operator;
            }
            else
            {
                expression = base.VisitMethodCall(node);
            }
            return(expression);
        }
示例#2
0
        private SpExpressionVisitor <TContext> GetExpressionVisitor(Expression exp)
        {
            SpExpressionVisitor <TContext> expVisitor = null;

            switch (exp.NodeType)
            {
            case ExpressionType.And:
            case ExpressionType.AndAlso:
            case ExpressionType.Or:
            case ExpressionType.OrElse:
                expVisitor = new SpConditionalExpressionVisitor <TContext>(SpQueryArgs);
                break;

            case ExpressionType.Equal:
            case ExpressionType.NotEqual:
            case ExpressionType.GreaterThan:
            case ExpressionType.GreaterThanOrEqual:
            case ExpressionType.LessThan:
            case ExpressionType.LessThanOrEqual:
                expVisitor = new SpComparisonExpressionVisitor <TContext>(SpQueryArgs);
                break;
            }
            return(expVisitor);
        }