public IEnumerable <Examination> AdvancedSearch(AdvancedSearchDTO advancedSearchDTO)
        {
            IEnumerable <Examination> examinations = BasicSearch(advancedSearchDTO.InitialParameters);

            if (examinations.Any())
            {
                return(examinations);
            }

            IAdvancedSearchStrategy strategy = GetAdvancedSearchStrategy(advancedSearchDTO);

            return(ApplyStrategy(strategy));
        }
        private IEnumerable <Examination> ApplyStrategy(IAdvancedSearchStrategy strategy)
        {
            for (BasicSearchDTO parameters = strategy.GetSearchParameters();
                 parameters != null;
                 parameters = strategy.GetSearchParameters())
            {
                IEnumerable <Examination> availableExaminations = BasicSearch(parameters);

                if (availableExaminations.Any())
                {
                    return(availableExaminations);
                }
            }

            return(Enumerable.Empty <Examination>());
        }