public SearchQuery(string query = "*") { query_string = new SearchQueryString(query); }
public List <Expression <Func <IndexString, bool> > > StringIndex(SearchQueryString SearchQueryString) { //var ResourceStorePredicate = LinqKit.PredicateBuilder.New<ResourceStore>(true); var ResultList = new List <Expression <Func <IndexString, bool> > >(); foreach (SearchQueryStringValue StringValue in SearchQueryString.ValueList) { var IndexStringPredicate = LinqKit.PredicateBuilder.New <IndexString>(true); IndexStringPredicate = IndexStringPredicate.And(IsSearchParameterId(SearchQueryString.Id)); if (!SearchQueryString.Modifier.HasValue) { if (StringValue.Value is null) { throw new ArgumentNullException(nameof(StringValue.Value)); } IndexStringPredicate = IndexStringPredicate.And(StartsWithOrEndsWith(StringValue.Value)); ResultList.Add(IndexStringPredicate); //ResourceStorePredicate = ResourceStorePredicate.Or(AnyIndex(IndexStringPredicate)); } else { var ArrayOfSupportedModifiers = Common.FhirTools.SearchQuery.SearchQuerySupport.GetModifiersForSearchType(SearchQueryString.SearchParamTypeId); if (ArrayOfSupportedModifiers.Contains(SearchQueryString.Modifier.Value)) { if (SearchQueryString.Modifier.Value != SearchModifierCode.Missing) { if (StringValue.Value is null) { throw new ArgumentNullException(nameof(StringValue.Value)); } } switch (SearchQueryString.Modifier.Value) { case SearchModifierCode.Missing: IndexStringPredicate = IndexStringPredicate.And(IsNotSearchParameterId(SearchQueryString.Id)); ResultList.Add(IndexStringPredicate); //ResourceStorePredicate = ResourceStorePredicate.Or(AnyIndexEquals(IndexStringPredicate, !StringValue.IsMissing)); break; case SearchModifierCode.Exact: IndexStringPredicate = IndexStringPredicate.And(EqualTo(StringValue.Value !)); ResultList.Add(IndexStringPredicate); //ResourceStorePredicate = ResourceStorePredicate.Or(AnyIndex(IndexStringPredicate)); break; case SearchModifierCode.Contains: IndexStringPredicate = IndexStringPredicate.And(Contains(StringValue.Value !)); ResultList.Add(IndexStringPredicate); //ResourceStorePredicate = ResourceStorePredicate.Or(AnyIndex(IndexStringPredicate)); break; default: throw new ApplicationException($"Internal Server Error: The search query modifier: {SearchQueryString.Modifier.Value.GetCode()} has been added to the supported list for {SearchQueryString.SearchParamTypeId.GetCode()} search parameter queries and yet no database predicate has been provided."); } } else { throw new ApplicationException($"Internal Server Error: The search query modifier: {SearchQueryString.Modifier.Value.GetCode()} is not supported for search parameter types of {SearchQueryString.SearchParamTypeId.GetCode()}."); } } } return(ResultList); }