internal static FilterContainer MergeMustFilters(this IFilterContainer leftContainer, IFilterContainer rightContainer) { if (!leftContainer.CanMergeMustAndMustNots() || !rightContainer.CanMergeMustAndMustNots()) { if (rightContainer.IsBoolFilterWithOnlyMustNots()) { return(CreateMustContainer(new [] { leftContainer }, rightContainer.Bool.MustNot)); } if (leftContainer.IsBoolFilterWithOnlyMustNots()) { return(CreateMustContainer(new [] { rightContainer }, leftContainer.Bool.MustNot)); } return(CreateMustContainer(new [] { leftContainer, rightContainer }, null)); } var mustNots = OrphanMustNots(leftContainer) .EagerConcat(OrphanMustNots(rightContainer)); var leftClauses = CreateMustClauses(leftContainer); var rightClauses = CreateMustClauses(rightContainer); var mustClauses = leftClauses.EagerConcat(rightClauses); var container = CreateMustContainer(mustClauses, mustNots); return(container); }
internal static FilterContainer MergeMustFilters(this IFilterContainer leftContainer, IFilterContainer rightContainer) { if (!leftContainer.CanMergeMustAndMustNots() || !rightContainer.CanMergeMustAndMustNots()) { if (rightContainer.IsBoolFilterWithOnlyMustNots()) return CreateMustContainer(new [] { leftContainer }, rightContainer.Bool.MustNot ); if (leftContainer.IsBoolFilterWithOnlyMustNots()) return CreateMustContainer(new [] { rightContainer }, leftContainer.Bool.MustNot ); return CreateMustContainer(new [] { leftContainer, rightContainer }, null); } var mustNots = OrphanMustNots(leftContainer) .EagerConcat(OrphanMustNots(rightContainer)); var leftClauses = CreateMustClauses(leftContainer); var rightClauses = CreateMustClauses(rightContainer); var mustClauses = leftClauses.EagerConcat(rightClauses); var container = CreateMustContainer(mustClauses, mustNots); return container; }