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);
        }
Exemple #2
0
 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;
     }
 }