/// <summary>
        /// Returns model with search results.
        /// </summary>
        /// <param name="customerId">The customer identifier.</param>
        /// <param name="criteria">The criteria.</param>
        /// <returns></returns>
        public async Task <PagedResultDto <SelectionAnswerSetResponseDto> > Find(
            int customerId,
            SelectionAnswerSetSearchDto criteria
            )
        {
            var result = await selectionAnswerSetService.Find(customerId, criteria);

            return(Mapper.Map <PagedResult <SelectionAnswerSet>, PagedResultDto <SelectionAnswerSetResponseDto> >(result));
        }
        public async Task <IHttpActionResult> GetSelectionAnswerSets(
            int customerId,
            [FromUri] SelectionAnswerSetSearchDto model,
            string language = null
            )
        {
            var result = await selectionAnswerSetHelper.Find(customerId, model);

            return(Ok(result));
        }
        /// <summary>
        /// Returns list of selection sets which matches to provided search criteria.
        /// </summary>
        /// <param name="customerId">The customer identifier.</param>
        /// <param name="searchRequest">The search request.</param>
        /// <returns></returns>
        public async Task <PagedResult <SelectionAnswerSet> > Find(int customerId, SelectionAnswerSetSearchDto searchRequest = null)
        {
            Expression <Func <SelectionAnswerSet, bool> > expression = s => !s.IsDeleted && s.CustomerId == customerId;

            if (searchRequest != null)
            {
                if (searchRequest.Tags != null && searchRequest.Tags.Any())
                {
                    Expression <Func <SelectionAnswerSet, bool> > tagsExpression = PredicateBuilder.False <SelectionAnswerSet>();

                    foreach (var tag in searchRequest.Tags)
                    {
                        tagsExpression = tagsExpression.Or(se => se.Tags.Any(t => t.Name.ToLower() == tag.ToLower()));
                    }

                    expression = expression.And(tagsExpression);
                }

                if (!string.IsNullOrEmpty(searchRequest.Q))
                {
                    var terms = searchRequest.Q.Split(' ').Where(r => !string.IsNullOrWhiteSpace(r));

                    foreach (var term in terms)
                    {
                        expression = expression.And(s => s.Name.Contains(term));
                    }
                }

                if (searchRequest.IsMultipleChoice.HasValue)
                {
                    expression = expression.And(s => s.IsMultipleChoice == searchRequest.IsMultipleChoice.Value);
                }
            }

            return(await selectionAnswerSetRepository.FindPagedAsync(
                       expression,
                       o => o.OrderBy(e => e.Id),
                       new List <Expression <Func <SelectionAnswerSet, object> > >
            {
                e => e.Tags,
                e => e.SelectionAnswerChoices.Select(c => c.LocalizedStrings.Select(s => s.AudioFileMedia.Tags)),
                e => e.QuestionElements.Select(q => q.QuestionElementToSelectionAnswerChoices)
            },
                       searchRequest != null?searchRequest.Skip : (int?)null,
                       searchRequest != null?searchRequest.Take : (int?)null
                       ));
        }