Esempio n. 1
0
        /// <summary>
        /// Adds a condition which supports many operations to a <see cref="TermEngineBuilder{T, TTermOption}"/>
        /// <param name="builder"></param>
        /// <param name="matchQuery">The predicate to apply when the term is parsed with an AND or OR operator.</param>
        /// <param name="notMatchQuery">The predicate to apply when the term is parsed with a NOT operator.</param>
        /// </summary>
        public static QueryBooleanEngineBuilder <T> ManyCondition <T>(
            this TermEngineBuilder <T, QueryTermOption <T> > builder,
            Func <string, IQuery <T>, IQuery <T> > matchQuery,
            Func <string, IQuery <T>, IQuery <T> > notMatchQuery) where T : class
        {
            ValueTask <IQuery <T> > valueMatch(string q, IQuery <T> val, QueryExecutionContext <T> ctx) => new(matchQuery(q, val));
            ValueTask <IQuery <T> > valueNotMatch(string q, IQuery <T> val, QueryExecutionContext <T> ctx) => new(notMatchQuery(q, val));

            return(builder.ManyCondition(valueMatch, valueNotMatch));
        }