public async Task <IActionResult> Passing(UserAnswer userAnswer) { var userId = GetUserId(); var question = await _db.TestQuestions .Include(q => q.Test) .ThenInclude(t => t.TestQuestions) .SingleAsync(q => q.Id == userAnswer.TestQuestionId); if (await _db.UserAnswers.AnyAsync(ua => ua.UserId == userId && ua.TestQuestionId == question.Id)) { return(RedirectToAction("Index")); } userAnswer.UserId = userId; await _testsManager.ProcessUserAnswer(userAnswer); if (question.IsLastQuestion) { var result = await _testsManager.GetUserTestResult(userAnswer); return(RedirectToAction("Result", new { testId = result.TestId, userId = result.UserId })); } var test = question.Test; var nextQuestion = test.TestQuestions .OrderBy(tq => tq.Id) .SkipWhile(q => q.Id != question.Id) .Skip(1) .First(); return(RedirectToAction("Passing", new { testId = test.Id, questionId = nextQuestion.Id })); }