/// <summary>
        /// Executes a search, returning a list of hits.
        /// </summary>
        /// <param name="wisc"></param>
        /// <returns></returns>
        public override IList <WorklistItem> GetSearchResults(IWorklistItemSearchContext wisc)
        {
            var results = new List <WorklistItem>();

            // the search criteria is broken up to gain performance. See #2416.
            var criteriaWithPatientConditions    = SelectCriteriaWithPatientConditions(wisc.SearchCriteria);
            var criteriaWithoutPatientConditions = ExcludeCriteriaWithPatientConditions(wisc.SearchCriteria);

            if (criteriaWithPatientConditions.Length > 0)
            {
                results = UnionMerge(results, wisc.FindWorklistItems(criteriaWithPatientConditions),
                                     item => item.ProcedureRef);
            }

            if (criteriaWithoutPatientConditions.Length > 0)
            {
                results = UnionMerge(results, wisc.FindWorklistItems(criteriaWithoutPatientConditions),
                                     item => item.ProcedureRef);
            }

            // include procedure degenerate items if requested
            if (wisc.IncludeDegenerateProcedureItems)
            {
                // search for procedures
                if (criteriaWithPatientConditions.Length > 0)
                {
                    results = UnionMerge(results, wisc.FindProcedures(criteriaWithPatientConditions),
                                         item => item.ProcedureRef);
                }

                if (criteriaWithoutPatientConditions.Length > 0)
                {
                    results = UnionMerge(results, wisc.FindProcedures(criteriaWithoutPatientConditions),
                                         item => item.ProcedureRef);
                }
            }

            // include patient degenerate items if requested
            if (wisc.IncludeDegeneratePatientItems)
            {
                // search for patients
                if (criteriaWithPatientConditions.Length > 0)
                {
                    // add any patients for which there is no result
                    results = UnionMerge(results, wisc.FindPatients(criteriaWithPatientConditions),
                                         item => item.PatientRef);
                }
            }

            return(results);
        }
		/// <summary>
		/// Executes a search, returning a list of hits.
		/// </summary>
		/// <param name="wisc"></param>
		/// <returns></returns>
		public override IList<WorklistItem> GetSearchResults(IWorklistItemSearchContext wisc)
		{
			var where = wisc.SearchCriteria;
			var results = new List<WorklistItem>();

			results = UnionMerge(results, wisc.FindWorklistItems(where), item => item.ProcedureRef);

			// include degenerate procedure items if requested
			if (wisc.IncludeDegenerateProcedureItems)
			{
				// search for procedures
				results = UnionMerge(results, wisc.FindProcedures(where), item => item.ProcedureRef);
			}

			// include degenerate patient items if requested
			if (wisc.IncludeDegeneratePatientItems)
			{
				// add any patients for which there is no result
				results = UnionMerge(results, wisc.FindPatients(where), item => item.PatientRef);
			}

			return results;
		}
        /// <summary>
        /// Executes a search, returning a list of hits.
        /// </summary>
        /// <param name="wisc"></param>
        /// <returns></returns>
        public override IList <WorklistItem> GetSearchResults(IWorklistItemSearchContext wisc)
        {
            var where = wisc.SearchCriteria;
            var results = new List <WorklistItem>();

            results = UnionMerge(results, wisc.FindWorklistItems(where), item => item.ProcedureRef);

            // include degenerate procedure items if requested
            if (wisc.IncludeDegenerateProcedureItems)
            {
                // search for procedures
                results = UnionMerge(results, wisc.FindProcedures(where), item => item.ProcedureRef);
            }

            // include degenerate patient items if requested
            if (wisc.IncludeDegeneratePatientItems)
            {
                // add any patients for which there is no result
                results = UnionMerge(results, wisc.FindPatients(where), item => item.PatientRef);
            }

            return(results);
        }
		/// <summary>
		/// Executes a search, returning a list of hits.
		/// </summary>
		/// <param name="wisc"></param>
		/// <returns></returns>
		public override IList<WorklistItem> GetSearchResults(IWorklistItemSearchContext wisc)
		{
			var results = new List<WorklistItem>();

			// the search criteria is broken up to gain performance. See #2416.
			var criteriaWithPatientConditions = SelectCriteriaWithPatientConditions(wisc.SearchCriteria);
			var criteriaWithoutPatientConditions = ExcludeCriteriaWithPatientConditions(wisc.SearchCriteria);

			if (criteriaWithPatientConditions.Length > 0)
			{
				results = UnionMerge(results, wisc.FindWorklistItems(criteriaWithPatientConditions),
					item => item.ProcedureRef);
			}

			if (criteriaWithoutPatientConditions.Length > 0)
			{
				results = UnionMerge(results, wisc.FindWorklistItems(criteriaWithoutPatientConditions),
					item => item.ProcedureRef);
			}

			// include procedure degenerate items if requested
			if (wisc.IncludeDegenerateProcedureItems)
			{
				// search for procedures
				if (criteriaWithPatientConditions.Length > 0)
				{
					results = UnionMerge(results, wisc.FindProcedures(criteriaWithPatientConditions),
					                     item => item.ProcedureRef);
				}

				if (criteriaWithoutPatientConditions.Length > 0)
				{
					results = UnionMerge(results, wisc.FindProcedures(criteriaWithoutPatientConditions),
					                     item => item.ProcedureRef);
				}
			}

			// include patient degenerate items if requested
			if (wisc.IncludeDegeneratePatientItems)
			{
				// search for patients
				if (criteriaWithPatientConditions.Length > 0)
				{
					// add any patients for which there is no result
					results = UnionMerge(results, wisc.FindPatients(criteriaWithPatientConditions),
						item => item.PatientRef);
				}
			}

			return results;
		}