Exemple #1
0
 public Func <IQuery <T>, ValueTask <IQuery <T> > > Visit(AndNode node, QueryExecutionContext <T> argument)
 {
     return(result => argument.Item.AllAsync(
                (q) => node.Left.Accept(this, argument)(q),
                (q) => node.Right.Accept(this, argument)(q)
                ));
 }
Exemple #2
0
        public Func <IQuery <T>, ValueTask <IQuery <T> > > Visit(UnaryNode node, QueryExecutionContext <T> argument)
        {
            var currentQuery = argument.CurrentTermOption.MatchPredicate;

            if (!node.UseMatch)
            {
                currentQuery = argument.CurrentTermOption.NotMatchPredicate;
            }

            return(result => currentQuery(node.Value, argument.Item, argument));
        }
Exemple #3
0
        public Func <IQuery <T>, ValueTask <IQuery <T> > > Visit(AndTermNode node, QueryExecutionContext <T> argument)
        {
            var predicates = new List <Func <IQuery <T>, ValueTask <IQuery <T> > > >();

            foreach (var child in node.Children)
            {
                Func <IQuery <T>, ValueTask <IQuery <T> > > predicate = (q) => argument.Item.AllAsync(
                    (q) => child.Operation.Accept(this, argument)(q)
                    );
                predicates.Add(predicate);
            }

            Func <IQuery <T>, ValueTask <IQuery <T> > > result = (Func <IQuery <T>, ValueTask <IQuery <T> > >)Delegate.Combine(predicates.ToArray());

            return(result);
        }
Exemple #4
0
 public Func <IQuery <T>, ValueTask <IQuery <T> > > Visit(TermNode node, QueryExecutionContext <T> argument)
 => node.Accept(this, argument);
Exemple #5
0
 public Func <IQuery <T>, ValueTask <IQuery <T> > > Visit(NotUnaryNode node, QueryExecutionContext <T> argument)
 {
     return(result => argument.Item.AllAsync(
                (q) => node.Operation.Accept(this, argument)(q)
                ));
 }