// GET: Lecturers public ActionResult Index(int?id, int?courseID) { ViewBag.StudentCount = db.Students.Count(); ViewBag.DepartmentCount = db.Departments.Count(); ViewBag.CourseCount = db.Courses.Count(); ViewBag.LecturerCount = db.Lecturers.Count(); var viewModel = new LecturerIndexData(); viewModel.Lecturers = db.Lecturers .Include(l => l.OfficeAssignment) .Include(l => l.Courses.Select(c => c.Department)) .OrderBy(l => l.LastName); if (id != null) { ViewBag.LecturerID = id.Value; viewModel.Courses = viewModel.Lecturers.Where(i => i.ID == id.Value).Single().Courses; } if (courseID != null) { ViewBag.CourseID = courseID.Value; viewModel.Enrollments = viewModel.Courses.Where(x => x.CourseID == courseID).Single().Enrollments; } return(View(viewModel)); }
// GET: Lecturers public async Task <IActionResult> Index(int?id, int?courseID) { /*The code repeats CourseAssignments and Course because the two properties from Course, * are needed to show the courses assigned to the lecturer. * The first string of 'ThenInclude' calls gets CourseAssignment.Course, Course.Enrollments, and Enrollment.Student * * 'Include' starts over with Lecturer properties, so you have to go through the chain again, * specifying Course.Department instead of Course.Enrollments */ var viewModel = new LecturerIndexData(); viewModel.Lecturers = await _context.Lecturers .Include(i => i.OfficeAssignment) .Include(i => i.CourseAssignments) .ThenInclude(i => i.Course) .ThenInclude(i => i.Enrollments) .ThenInclude(i => i.Student) .Include(i => i.CourseAssignments) .ThenInclude(i => i.Course) .ThenInclude(i => i.Department) .AsNoTracking() .OrderBy(i => i.LastName) .ToListAsync(); if (id != null) { ViewData["LecturerID"] = id.Value; Lecturer instructor = viewModel.Lecturers.Where( i => i.ID == id.Value).Single(); viewModel.Courses = instructor.CourseAssignments.Select(s => s.Course); } if (courseID != null) { ViewData["CourseID"] = courseID.Value; viewModel.Enrollments = viewModel.Courses.Where( x => x.CourseID == courseID).Single().Enrollments; } return(View(viewModel)); }