private IEnumerable <SearchIndexEntry> ProcessCompositeSearchParameter(SearchParameter searchParameter, Base resource, FhirEvaluationContext context) { Debug.Assert(searchParameter?.Type == SearchParamType.Composite, "The search parameter must be composite."); SearchParameterInfo compositeSearchParameterInfo = searchParameter.ToInfo(); IEnumerable <Base> rootObjects = resource.Select(searchParameter.Expression, context); foreach (var rootObject in rootObjects) { int numberOfComponents = searchParameter.Component.Count; bool skip = false; var componentValues = new IReadOnlyList <ISearchValue> [numberOfComponents]; // For each object extracted from the expression, we will need to evaluate each component. for (int i = 0; i < numberOfComponents; i++) { SearchParameter.ComponentComponent component = searchParameter.Component[i]; // First find the type of the component. SearchParameter componentSearchParameterDefinition = _searchParameterDefinitionManager.GetSearchParameter(component.Definition.Url); IReadOnlyList <ISearchValue> extractedComponentValues = ExtractSearchValues( componentSearchParameterDefinition.Url, componentSearchParameterDefinition.Type.Value, componentSearchParameterDefinition.Target, rootObject, component.Expression, context); // Filter out any search value that's not valid as a composite component. extractedComponentValues = extractedComponentValues .Where(sv => sv.IsValidAsCompositeComponent) .ToArray(); if (!extractedComponentValues.Any()) { // One of the components didn't have any value and therefore it will not be indexed. skip = true; break; } componentValues[i] = extractedComponentValues; } if (skip) { continue; } yield return(new SearchIndexEntry(compositeSearchParameterInfo, new CompositeSearchValue(componentValues))); } }
public static Uri GetComponentDefinitionUri(this SearchParameter.ComponentComponent component) { return(component?.Definition?.Url); }
public static Uri GetComponentDefinitionUri(this SearchParameter.ComponentComponent component) { return(!string.IsNullOrEmpty(component.Definition) ? new Uri(component.Definition) : null); }