static async Task ShowRegistrations_Good(IDac dac) { // Registrations var regs = await dac.GetRegistrations(it => true); // Students var relatedStudentIdQry = regs.Select(it => it.StudentId).Distinct(); var students = await dac.GetStudents(it => relatedStudentIdQry.Contains(it.Id)); // Subjects var relatedSubjectIdQry = regs.Select(it => it.SubjectId).Distinct(); var subjects = await dac.GetSubjects(it => relatedSubjectIdQry.Contains(it.Id)); // Teachers var relatedTeacherIdQry = subjects.Select(it => it.TeacherId).Distinct(); var teachers = await dac.GetTeachers(it => relatedTeacherIdQry.Contains(it.Id)); foreach (var reg in regs) { var student = students.FirstOrDefault(it => it.Id == reg.StudentId); var subject = subjects.FirstOrDefault(it => it.Id == reg.SubjectId); var teacher = teachers.FirstOrDefault(it => it.Id == subject.TeacherId); Console.WriteLine($"{reg.Id:00}|{subject.Name}, {student.Name}, {teacher.Name}, {reg.Semester}, {reg.Grade}"); } }