protected IEnumerable <FilterParenthood <Filter.Filter, Filter.Group> > VisitAllSubGroupFilters(Filter.Filter filter)
 {
     foreach (var f in filter.SubFilters())
     {
         if (f is Filter.Group)
         {
             Filter.Group gf = (Filter.Group)f;
             yield return(new FilterParenthood <Filter.Filter, Filter.Group>(filter, gf));
         }
         foreach (var f2 in VisitAllSubGroupFilters(f))
         {
             yield return(f2);
         }
     }
 }
        protected FilterParenthood <Filter.Filter, Filter.Group> GetDeepestGroupFilter(Filter.Filter filter)
        {
            foreach (var f in filter.SubFilters())
            {
                var sgf = GetDeepestGroupFilter(f);
                if (sgf.child != null)
                {
                    return(sgf);
                }

                if (f is Filter.Group)
                {
                    Filter.Group gf = (Filter.Group)f;
                    return(new FilterParenthood <Filter.Filter, Filter.Group>(filter, gf));
                }
            }

            return(new FilterParenthood <Filter.Filter, Filter.Group>());
        }