Esempio n. 1
0
 public async Task <PagedResultDto <QuestionListEntryDto> > SearchForQuestions([FromBody]  SearchQParametersDto parameters)
 {
     return(await _questionService.SearchForQuestionsAsync(parameters));
 }
Esempio n. 2
0
        public async Task <PagedResultDto <QuestionListEntryDto> > SearchForQuestionsAsync(SearchQParametersDto parameters)
        {
            IQueryable <Question> queryBeforeSkipAndTake = _context.Questions
                                                           .OrderBy(x => x.Title)
                                                           .ThenBy(x => x.Id);

            if (!string.IsNullOrWhiteSpace(parameters.Title))
            {
                queryBeforeSkipAndTake = queryBeforeSkipAndTake.Where(x => x.Title.Contains(parameters.Title));
            }

            if (parameters.AndTags.Any())
            {
                IList <int> tagids = parameters.AndTags.Select(x => x.Id).ToList();
                foreach (int tagId in tagids)
                {
                    queryBeforeSkipAndTake = queryBeforeSkipAndTake.Where(x => x.RelTags.Any(rel => rel.Tag.Id == tagId));
                }
            }

            if (parameters.OrTags.Any())
            {
                IList <int> tagids = parameters.OrTags.Select(x => x.Id).ToList();
                queryBeforeSkipAndTake = queryBeforeSkipAndTake.Where(x => x.RelTags.Any(rel => tagids.Contains(rel.Tag.Id)));
            }

            if (parameters.Language.HasValue)
            {
                queryBeforeSkipAndTake = queryBeforeSkipAndTake.Where(x => x.Language == parameters.Language);
            }

            if (parameters.StatusCreated || parameters.StatusReleased || parameters.StatusObsolete)
            {
                queryBeforeSkipAndTake = queryBeforeSkipAndTake.Where(x =>
                                                                      x.Status == QuestionStatus.Created && parameters.StatusCreated ||
                                                                      x.Status == QuestionStatus.Released && parameters.StatusReleased ||
                                                                      x.Status == QuestionStatus.Obsolete && parameters.StatusObsolete);
            }
            else
            {
                queryBeforeSkipAndTake = queryBeforeSkipAndTake.Where(x =>
                                                                      x.Status == QuestionStatus.Created ||
                                                                      x.Status == QuestionStatus.Released);
            }

            PagedResultDto <QuestionListEntryDto> result = await ToPagedResult(queryBeforeSkipAndTake, parameters.Page, MaterializeQuestionList);

            return(result);
        }