internal static FilterContainer MergeShouldFilters(this IFilterContainer leftContainer, IFilterContainer rightContainer)
        {
            if (!leftContainer.CanMergeShould() || !leftContainer.CanMergeShould())
            {
                return(CreateShouldContainer(new List <IFilterContainer> {
                    leftContainer, rightContainer
                }));
            }

            var lBoolFilter = leftContainer.Bool;
            var rBoolFilter = rightContainer.Bool;

            var lHasShouldFilters = lBoolFilter != null && lBoolFilter.Should.HasAny();
            var rHasShouldFilters = rBoolFilter != null && rBoolFilter.Should.HasAny();

            var lq = lHasShouldFilters ? lBoolFilter.Should : new[] { leftContainer };
            var rq = rHasShouldFilters ? rBoolFilter.Should : new[] { rightContainer };

            var shouldClauses = lq.EagerConcat(rq);

            return(CreateShouldContainer(shouldClauses));
        }