Beispiel #1
0
        private static List <FilterSubExpression> ParseTopGroup(List <FilterSubExpression> exprs, out bool parsed)
        {
            List <FilterSubExpression> groups = exprs.Where(x => x.IsPrimitive <OpenGroupToken>()).ToList();

            if (groups.Count == 0)
            {
                parsed = false;
                return(exprs);
            }

            List <FilterSubExpression> ret = exprs.ToList();

            parsed = true;

            int topGroupLevel          = groups.Max(x => x.AsPrimitive <OpenGroupToken>().DeptLevel);
            FilterSubExpression open   = groups.First(x => x.AsPrimitive <OpenGroupToken>().DeptLevel == topGroupLevel);
            int topGroupId             = open.AsPrimitive <OpenGroupToken>().GroupId;
            FilterSubExpression closed = exprs.First(x => x.AsPrimitive <CloseGroupToken>()?.GroupId == topGroupId);

            List <FilterSubExpression> groupExpr = new List <FilterSubExpression>();

            int openIndex   = ret.IndexOf(open);
            int closedIndex = ret.IndexOf(closed);

            for (int i = openIndex + 1; i < closedIndex; i++)
            {
                groupExpr.Add(ret[i]);
                ret[i] = null;
            }

            ret[closedIndex] = null;

            ret[openIndex] = new GroupFilterSubExpression(groupExpr);

            return(ret.Where(x => x != null).ToList());
        }
 public GroupFilterSubExpression(List <FilterSubExpression> expressions)
 {
     Expression = FilterParser.Parse(expressions);
 }
 public TruthyFilterSubExpression(FilterSubExpression expression)
 {
     Expression = expression ?? throw new ArgumentNullException(nameof(expression));
 }
 public NegationFilterSubExpression(FilterSubExpression expr)
 {
     Expression = expr ?? throw new ArgumentNullException(nameof(expr));
 }