void ISearchValueVisitor.Visit(UriSearchValue uri) { EnsureArg.IsNotNull(uri, nameof(uri)); switch (_modifier?.SearchModifierCode) { case null: _outputExpression = Expression.StringEquals(FieldName.Uri, _componentIndex, uri.Uri, false); break; case SearchModifierCode.Above: _outputExpression = Expression.And( Expression.LeftSideStartsWith(FieldName.Uri, _componentIndex, uri.Uri, false), Expression.NotStartsWith(FieldName.Uri, _componentIndex, KnownUriSchemes.Urn, false)); break; case SearchModifierCode.Below: _outputExpression = Expression.And( Expression.StartsWith(FieldName.Uri, _componentIndex, uri.Uri, false), Expression.NotStartsWith(FieldName.Uri, _componentIndex, KnownUriSchemes.Urn, false)); break; default: ThrowModifierNotSupported(); break; } }