/// <summary> /// Queries for a specified resource. /// </summary> /// <param name="parameters">The parameters.</param> /// <returns>Returns the FHIR query result containing the results of the query.</returns> /// <exception cref="System.ArgumentNullException">parameters</exception> public virtual FhirQueryResult Query(System.Collections.Specialized.NameValueCollection parameters) { if (parameters == null) { throw new ArgumentNullException(nameof(parameters)); } Core.Model.Query.NameValueCollection imsiQuery = null; FhirQuery query = QueryRewriter.RewriteFhirQuery <TFhirResource, TModel>(parameters, out imsiQuery); // Do the query int totalResults = 0; List <IResultDetail> issues = new List <IResultDetail>(); var predicate = QueryExpressionParser.BuildLinqExpression <TModel>(imsiQuery); var imsiResults = this.Query(predicate, issues, query.QueryId, query.Start, query.Quantity, out totalResults); var webOperationContext = WebOperationContext.Current; // Return FHIR query result return(new FhirQueryResult() { Details = issues, Outcome = ResultCode.Accepted, Results = imsiResults.AsParallel().Select(o => this.MapToFhir(o, webOperationContext)).OfType <DomainResourceBase>().ToList(), Query = query, TotalResults = totalResults }); }
public IEnumerable <object> Query(Core.Model.Query.NameValueCollection queryParameters, int offset, int count, out int totalCount) { var query = QueryExpressionParser.BuildLinqExpression <AppletSolution>(queryParameters); var applets = ApplicationServiceContext.Current.GetService <IAppletSolutionManagerService>().Solutions.Where(query.Compile()).Select(o => new AppletSolutionInfo(o, null)); totalCount = applets.Count(); return(applets.Skip(offset).Take(count).OfType <Object>()); }
/// <summary> /// Queries for a specified resource. /// </summary> /// <param name="parameters">The parameters.</param> /// <returns>Returns the FHIR query result containing the results of the query.</returns> /// <exception cref="System.ArgumentNullException">parameters</exception> public virtual Bundle Query(System.Collections.Specialized.NameValueCollection parameters) { if (parameters == null) { this.m_traceSource.TraceError($"Argument {nameof(parameters)} null or empty"); throw new ArgumentNullException(this.m_localizationService.GetString("error.type.ArgumentNullException")); } Core.Model.Query.NameValueCollection hdsiQuery = null; FhirQuery query = QueryRewriter.RewriteFhirQuery(typeof(TFhirResource), typeof(TModel), parameters, out hdsiQuery); // Do the query int totalResults = 0; var predicate = QueryExpressionParser.BuildLinqExpression <TModel>(hdsiQuery); var hdsiResults = this.Query(predicate, query.QueryId, query.Start, query.Quantity, out totalResults); var auth = AuthenticationContext.Current; // Return FHIR query result if (Environment.ProcessorCount > 4) { hdsiResults = hdsiResults.AsParallel().AsOrdered(); } var retVal = new FhirQueryResult(typeof(TFhirResource).Name) { Results = hdsiResults.Select(o => { using (AuthenticationContext.EnterContext(auth.Principal)) { return(new Bundle.EntryComponent() { Resource = this.MapToFhir(o), Search = new Bundle.SearchComponent() { Mode = Bundle.SearchEntryMode.Match } }); } }).ToList(), Query = query, TotalResults = totalResults }; this.ProcessIncludes(hdsiResults, parameters, retVal); return(ExtensionUtil.ExecuteBeforeSendResponseBehavior(TypeRestfulInteraction.SearchType, this.ResourceType, MessageUtil.CreateBundle(retVal, Bundle.BundleType.Searchset)) as Bundle); }
/// <summary> /// Parameters /// </summary> public override FhirQueryResult Query(System.Collections.Specialized.NameValueCollection parameters) { if (parameters == null) { throw new ArgumentNullException(nameof(parameters)); } Core.Model.Query.NameValueCollection hdsiQuery = null; FhirQuery query = QueryRewriter.RewriteFhirQuery <SanteDB.Messaging.FHIR.Resources.Observation, Core.Model.Acts.Observation>(parameters, out hdsiQuery); // Do the query int totalResults = 0; IEnumerable <Core.Model.Acts.Observation> hdsiResults = null; if (parameters["value-concept"] != null) { var predicate = QueryExpressionParser.BuildLinqExpression <Core.Model.Acts.CodedObservation>(hdsiQuery); hdsiResults = this.QueryEx <Core.Model.Acts.CodedObservation>(predicate, query.QueryId, query.Start, query.Quantity, out totalResults).OfType <Core.Model.Acts.Observation>(); } else if (parameters["value-quantity"] != null) { var predicate = QueryExpressionParser.BuildLinqExpression <Core.Model.Acts.QuantityObservation>(hdsiQuery); hdsiResults = this.QueryEx <Core.Model.Acts.QuantityObservation>(predicate, query.QueryId, query.Start, query.Quantity, out totalResults).OfType <Core.Model.Acts.Observation>(); } else { var predicate = QueryExpressionParser.BuildLinqExpression <Core.Model.Acts.Observation>(hdsiQuery); hdsiResults = this.Query(predicate, query.QueryId, query.Start, query.Quantity, out totalResults); } var restOperationContext = RestOperationContext.Current; // Return FHIR query result return(new FhirQueryResult() { Results = hdsiResults.AsParallel().Select(o => this.MapToFhir(o, restOperationContext)).OfType <ResourceBase>().ToList(), Query = query, TotalResults = totalResults }); }
/// <summary> /// Queries for a specified resource. /// </summary> /// <param name="parameters">The parameters.</param> /// <returns>Returns the FHIR query result containing the results of the query.</returns> /// <exception cref="System.ArgumentNullException">parameters</exception> public virtual FhirQueryResult Query(System.Collections.Specialized.NameValueCollection parameters) { if (parameters == null) { throw new ArgumentNullException(nameof(parameters)); } Core.Model.Query.NameValueCollection hdsiQuery = null; FhirQuery query = QueryRewriter.RewriteFhirQuery <TFhirResource, TModel>(parameters, out hdsiQuery); // Do the query int totalResults = 0; var predicate = QueryExpressionParser.BuildLinqExpression <TModel>(hdsiQuery); var hdsiResults = this.Query(predicate, query.QueryId, query.Start, query.Quantity, out totalResults); var restOperationContext = RestOperationContext.Current; var auth = AuthenticationContext.Current; // Return FHIR query result return(new FhirQueryResult() { Results = hdsiResults.AsParallel().Select(o => { try { AuthenticationContext.Current = auth; return this.MapToFhir(o, restOperationContext); } finally { AuthenticationContext.Current = new AuthenticationContext(AuthenticationContext.AnonymousPrincipal); } }).OfType <ResourceBase>().ToList(), Query = query, TotalResults = totalResults }); }