private Expression GetLegalExpression(LegalFilterParser legalFilterParser, Expression expression)
        {
            Logger.Log("Identifying maximal legal expression", Indentation.Two);
            var legalExpression = legalFilterParser.Visit(expression);

            if (legalFilterParser.IsIllegal)
            {
                HasIllegalServerFilters = legalFilterParser.IsIllegal;
            }

            return(legalExpression);
        }
        private void AddIllegalExpressions(LegalFilterParser parser)
        {
            foreach (var expr in parser.IllegalExpressionsForSplitRequest)
            {
                var newLegalParser  = new LegalFilterParser(strict);
                var newFilterParser = new FilterExpressionParser();

                var legalExpression    = newLegalParser.Visit(expr);
                var filteredExpression = newFilterParser.Visit(legalExpression);

                FilterSets.AddRange(GetFilters(newFilterParser.Conditions));

                AddIllegalExpressions(newLegalParser);
            }
        }
        public Expression Build(Expression expression)
        {
            Logger.Log("Identifying parameter components", Indentation.One);

            var legalFilterParser = new LegalFilterParser(strict);

            var propertyExpression = ParseColumns(expression);
            var flaggedExpression  = queryHelper?.FlagKeep(propertyExpression) ?? propertyExpression;
            var legalExpression    = GetLegalExpression(legalFilterParser, flaggedExpression);
            var filterExpression   = ParseFilters(legalExpression);
            var orderExpression    = ParseSort(filterExpression);
            var countExpression    = ParseCount(orderExpression);

            AddIllegalExpressions(legalFilterParser);
            RemoveInvalidFilters();

            return(countExpression);
        }