public IEnumerable <RealTimeStatistics> GetRealTimeStatistics(RealTimeStatisticsViewModel rtsVM) { IEnumerable <Answer> answers = (from a in _context.Answers.ToList() join q in rtsVM.Questions on a.QuestionId equals q.Id select a).ToList(); IEnumerable <RealtimeRespons> responses = (from r in _context.RealtimeResponses.ToList() where r.ModuleHistoryId == rtsVM.ModuleHistory.Id select r).ToList(); ICollection <RealTimeStatistics> realTimeStatistics = new List <RealTimeStatistics>(); foreach (var group in rtsVM.Groups) { foreach (var question in rtsVM.Questions) { realTimeStatistics.Add(new RealTimeStatistics { GroupId = group.Id, QuestionId = question.Id, TotalAnswers = !responses.Any(r => r.QuestionId == question.Id && r.GroupId == group.Id) ? 0 : responses.Count(r => r.QuestionId == question.Id && r.GroupId == group.Id), CorrectAnswers = !responses.Any(r => r.QuestionId == question.Id && r.GroupId == group.Id && answers.Where(a => a.Id == r.AnswerId).Select(a => a.IsCorrect).SingleOrDefault() == true) ? 0 : responses.Count(r => r.QuestionId == question.Id && r.GroupId == group.Id && answers.Where(a => a.Id == r.AnswerId).Select(a => a.IsCorrect).SingleOrDefault() == true) }); } } return(realTimeStatistics); }
public async Task QueryRealTimeStats(RealTimeStatisticsViewModel realTimeStatisticsVM, bool immediateCheck) { if (!_locked) { _locked = true; if (!immediateCheck) { await Task.Delay(5000); } IEnumerable <RealTimeStatistics> realTimeStatistics = _quizManager.GetRealTimeStatistics(realTimeStatisticsVM).ToList(); Clients.Caller.RecieveRealTimeStatistics(realTimeStatistics); _locked = false; } }