void ISearchValueVisitor.Visit(UriSearchValue uri) { EnsureArg.IsNotNull(uri, nameof(uri)); switch (_modifier) { case null: _outputExpression = Expression.Equals(FieldName.Uri, _componentIndex, uri.Uri); break; case SearchModifierCode.Above: _outputExpression = Expression.And( Expression.EndsWith(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; } }
void ISearchValueVisitor.Visit(StringSearchValue s) { EnsureArg.IsNotNull(s, nameof(s)); EnsureOnlyEqualComparatorIsSupported(); if (_modifier == null) { // Based on spec http://hl7.org/fhir/STU3/search.html#string, // is case-insensitive search so we will normalize into lower case for search. _outputExpression = Expression.StartsWith(FieldName.String, _componentIndex, s.String, true); } else if (_modifier == SearchModifierCode.Exact) { _outputExpression = Expression.StringEquals(FieldName.String, _componentIndex, s.String, false); } else if (_modifier == SearchModifierCode.Contains) { // Based on spec http://hl7.org/fhir/STU3/search.html#modifiers, // contains is case-insensitive search so we will normalize into lower case for search. _outputExpression = Expression.Contains(FieldName.String, _componentIndex, s.String, true); } else { ThrowModifierNotSupported(); } }