Ejemplo n.º 1
0
        public override void VisitLikeExpression(LikeExpression likeExpression)
        {
            likeExpression.Left.Accept(this);

            var leftExpression = PopStack();

            var visitResult = VisitInternal(likeExpression.Right);

            Expression expression = null;

            if (visitResult.StartsWith && visitResult.EndsWith)
            {
                expression = PredicateUtils.CallContains(
                    leftExpression,
                    visitResult.Expression,
                    _visitorMetadata.OperationsProvider);
            }
            //Starts with
            else if (visitResult.StartsWith)
            {
                expression = PredicateUtils.CallStartsWith(
                    leftExpression,
                    visitResult.Expression,
                    _visitorMetadata.OperationsProvider);
            }
            //Ends with
            else if (visitResult.EndsWith)
            {
                expression = PredicateUtils.CallEndsWith(
                    leftExpression,
                    visitResult.Expression,
                    _visitorMetadata.OperationsProvider);
            }
            else
            {
                expression = PredicateUtils.CreateComparisonExpression(
                    leftExpression,
                    visitResult.Expression,
                    BooleanComparisonType.Equals,
                    _visitorMetadata.OperationsProvider);
            }

            if (likeExpression.Not)
            {
                expression = Expression.Not(expression);
            }
            AddExpressionToStack(expression);
        }
Ejemplo n.º 2
0
        public override void VisitBooleanComparisonExpression(BooleanComparisonExpression booleanComparisonExpression)
        {
            booleanComparisonExpression.Left.Accept(this);
            booleanComparisonExpression.Right.Accept(this);

            var rightExpression = PopStack();
            var leftExpression  = PopStack();

            var expression = PredicateUtils.CreateComparisonExpression(
                leftExpression,
                rightExpression,
                booleanComparisonExpression.Type,
                _visitorMetadata.OperationsProvider);

            AddExpressionToStack(expression);
        }