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); }
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); }