public async Task <StudentsGradeByInstructor> ListGradesGiven(int instructorId) { var instructor = await _instructorRepository.GetById(instructorId); if (instructor == null) { throw new ArgumentException($"There's no instructor with the instructorId = {instructorId}"); } var enrollments = await _enrollmentRepository.GetByInstructorId(instructorId); if (!enrollments.Any()) { throw new Exception($"The instructor with the Id = {instructorId} never gave a grade"); } var result = new StudentsGradeByInstructor { Instructor = $"{instructor.FirstName} {instructor.LastName}", InstructorId = instructorId }; foreach (var enrollment in enrollments) { result.GradeXStudentXCourse.Add( new StudentsGradeInfo { Grade = enrollment.Grade, StudentId = enrollment.StudentId, Student = $"{enrollment.Student.FirstName} {enrollment.Student.LastName}", CourseId = enrollment.CourseId, Course = enrollment.Course.Title } ); } return(result); }