Exemplo n.º 1
0
        private SqlSelectStatement VisitFilterExpression(PredicateBinding input, Predicate predicate, bool negatePredicate)
        {
            Symbol fromSymbol;
            var    result = VisitInputExpression(input.Predicate, input.VariableName, input.VariableType, out fromSymbol);

            if (!IsCompatible(result, PredicateType.Filter))
            {
                result = CreateNewSelectStatement(result, input.VariableName, input.VariableType, out fromSymbol);
            }

            selectStatementStack.Push(result);
            symbolTable.EnterScope();

            AddFromSymbol(result, input.VariableName, fromSymbol);

            if (negatePredicate)
            {
                result.Where.Append("NOT (");
            }
            result.Where.Append(predicate.Accept(this));
            if (negatePredicate)
            {
                result.Where.Append(")");
            }

            symbolTable.ExitScope();
            selectStatementStack.Pop();

            return(result);
        }
Exemplo n.º 2
0
 internal Predicate Filter(PredicateBinding input, Predicate predicate)
 {
     return(input.Filter(predicate));
 }
Exemplo n.º 3
0
 internal Predicate Project(PredicateBinding input, Predicate projection)
 {
     return(input.Project(projection));
 }
Exemplo n.º 4
0
 internal Predicate TranslateLambda(LambdaExpression lambda, Predicate input, out PredicateBinding binding)
 {
     input   = NormalizeSetSource(input);
     binding = input.BindAs(_aliasGenerator.Next());
     return(TranslateLambda(lambda, binding.Variable));
 }
Exemplo n.º 5
0
 protected override Predicate TranslateOneLambda(PredicateConverter parent, PredicateBinding sourceBinding, Predicate lambda)
 {
     return(parent.Project(sourceBinding, lambda));
 }
Exemplo n.º 6
0
 protected abstract Predicate TranslateOneLambda(PredicateConverter parent, PredicateBinding sourceBinding, Predicate lambda);
Exemplo n.º 7
0
        protected Predicate Translate(PredicateConverter parent, MethodCallExpression call, out Predicate source, out PredicateBinding sourceBinding, out Predicate lambda)
        {
            source = parent.TranslateExpression(call.Arguments[0]);

            var lambdaExpression = parent.GetLambdaExpression(call, 1);

            lambda = parent.TranslateLambda(lambdaExpression, source, out sourceBinding);
            return(TranslateOneLambda(parent, sourceBinding, lambda));
        }