Esempio n. 1
0
        /// <inheritdoc />
        public async Task <Expression <Func <TEntity, bool> > > ParseAsync(string filterExpression, bool unquote = true, ICustomFilterConvertersRunner <TEntity> customFilterConverterRunner = null)
        {
            var rootFilter = await ParseAsFilterAsync(filterExpression, unquote, customFilterConverterRunner);

            var starter = PredicateBuilder.New <TEntity>();

            starter.Start(rootFilter);
            return(starter);
        }
Esempio n. 2
0
        /// <inheritdoc />
        public async Task <Expression <Func <TEntity, bool> > > ParseAsync(NameValueCollection parameters, bool unquote, ICustomFilterConvertersRunner <TEntity> customFilterConverterRunner = null)
        {
            if (parameters == null || parameters.Count == 0)
            {
                return(null);
            }
            var filterString = parameters.Get("$filter", string.Empty);

            if (string.IsNullOrWhiteSpace(filterString))
            {
                return(null);
            }
            return(await ParseAsync(filterString, unquote, customFilterConverterRunner));
        }
Esempio n. 3
0
        /// <inheritdoc />
        public async Task <Filter <TEntity> > ParseAsFilterAsync(string filterExpression, bool unquote = true, ICustomFilterConvertersRunner <TEntity> customFilterConverterRunner = null)
        {
            var trimmedfilterExpression = filterExpression.Trim();

            if (trimmedfilterExpression.Length > 2 && unquote)
            {
                trimmedfilterExpression = trimmedfilterExpression.Unquote(1).Trim();
            }
            var state = new ParserState <TEntity>(trimmedfilterExpression);

            for (state.CharIndex = 0; state.CharIndex < state.FilterString.Length; state.CharIndex++)
            {
                _ActionDictionary.GetValueOrDefault(state.Char).Invoke(state);
            }
            state.LastApply(); // Final apply required to get the last value.
            var rootFilter = state.CurrentFilter;

            while (rootFilter.Parent != null)
            {
                rootFilter = rootFilter.Parent;
            }
            if (customFilterConverterRunner != null)
            {
                rootFilter = await customFilterConverterRunner.ConvertAsync(rootFilter);
            }
            return(rootFilter);
        }