internal static QueryContainer CombineAsShould(this QueryContainer leftContainer, QueryContainer rightContainer) { if (!leftContainer.CanMergeShould() || !leftContainer.CanMergeShould()) return CreateShouldContainer(new List<QueryContainer> { leftContainer, rightContainer }); var lBoolQuery = leftContainer.Self().Bool; var rBoolQuery = rightContainer.Self().Bool; var lHasShouldQueries = lBoolQuery != null && lBoolQuery.Should.HasAny(); var rHasShouldQueries = rBoolQuery != null && rBoolQuery.Should.HasAny(); var lq = lHasShouldQueries ? lBoolQuery.Should : new[] { leftContainer }; var rq = rHasShouldQueries ? rBoolQuery.Should : new[] { rightContainer }; var shouldClauses = lq.EagerConcat(rq); return CreateShouldContainer(shouldClauses); }
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); }