public async Task <Dictionary <int, int> > GetPollQuestionAnswersPlotInfoAsync(string questionId) { var answers = await AnswersUnits.AsQueryable().SelectMany(unit => unit.Answers).Where(answer => answer.QuestionId == questionId).ToListAsync(); var questionOptionsCount = (await GetPollBaseByQuestionIdAsync(questionId)).Questions.Single(pollQuestion => pollQuestion.Id == questionId).AnswerOptions.Count; var dictionary = new Dictionary <int, int>(); for (int i = 0; i < questionOptionsCount; i++) { dictionary.Add(i, answers.Count(answer => answer.SelectedOptions.Any(option => option == i))); } return(dictionary); }
public async Task <IEnumerable <IGrouping <string, BriefQuizAnswerResponse> > > GetQuizAnswersAsync(string quizId) { var query = from answersUnit in AnswersUnits.AsQueryable().Where(unit => unit.PollBaseId == quizId) join userModel in Users.AsQueryable() on answersUnit.CreatorUserId equals userModel.UserId select new BriefQuizAnswerResponse { Id = answersUnit.Id, FullName = userModel.LastName + " " + userModel.FirstName, GroupName = userModel.GroupName, AnswerDate = answersUnit.AnswerDate, CreatorUserId = answersUnit.CreatorUserId, TotalAssessment = answersUnit.TotalAssessment, IsChecked = answersUnit.IsChecked }; var responses = await query.ToListAsync(); return(responses.ToLookup(r => r.GroupName)); }
public async Task <IEnumerable <IGrouping <string, PollAnswerResponse> > > GetPollQuestionAnswersAsync(string questionId) { var query = from answersUnit in AnswersUnits.AsQueryable() join userModel in Users.AsQueryable() on answersUnit.CreatorUserId equals userModel.UserId select new { FullName = userModel.LastName + " " + userModel.FirstName, userModel.GroupName, answersUnit.AnswerDate, answersUnit.Answers, answersUnit.CreatorUserId }; var pollAnswerResponses = (await query.ToListAsync()).Where(t => t.Answers.Any(a => a.QuestionId == questionId)).Select(t => new PollAnswerResponse() { FullName = t.FullName, AnswerDate = t.AnswerDate, CreatorUserId = t.CreatorUserId, Group = t.GroupName, SelectedOptions = t.Answers.Single(ans => ans.QuestionId == questionId).SelectedOptions.Select(i => i + 1), }); return(pollAnswerResponses.ToLookup(response => response.Group)); }