попробуйте этот код:
var std = db.Students
.Include(s => s.Enrollments.Select(en=>en.Course))
.Where(s => s.StudentId == id)
.SingleOrDefault(); // or ToList() if you want fetch all students
if(std != null){
// do your work, for example, accessing this properties:
var a = std; // the student
var b = std.Enrollments; // student's enrollments
var c = std.Enrollments.First().Course; // test for access one of the enrollments's course
var d = c.Instructors; // test for access course's instructors all
// or project all instructors in a List:
var instructors = new List<Instructor>();
foreach (var enr in std.Enrollments) {
foreach (var ins in enr.Course.Instructors) {
if (!instructors.Contains(ins)) {
instructors.Add(ins);
}
}
} // now, the "instructors" contains all instructors associated with current user!
}else{
// if is null, do something else
}
привет
ОБНОВЛЕНО
и, если вы хотите проверить запрос, замените первую строку, вот такую:
var stdquery = db.Students
.Include(s => s.Enrollments.Select(en=>en.Course))
.Where(s => s.PersonID == id);
var std = stdquery.SingleOrDefault();
и вы увидите этот SQL-оператор в stdquery:
{SELECT
[Project1].[PersonID] AS [PersonID],
[Project1].[C1] AS [C1],
[Project1].[LastName] AS [LastName],
[Project1].[FirstName] AS [FirstName],
[Project1].[EnrollmentDate] AS [EnrollmentDate],
[Project1].[C2] AS [C2],
[Project1].[EnrollmentID] AS [EnrollmentID],
[Project1].[CourseID] AS [CourseID],
[Project1].[PersonID1] AS [PersonID1],
[Project1].[Grade] AS [Grade],
[Project1].[CourseID1] AS [CourseID1],
[Project1].[Title] AS [Title],
[Project1].[Credits] AS [Credits],
[Project1].[DepartmentID] AS [DepartmentID]
FROM ( SELECT
[Extent1].[PersonID] AS [PersonID],
[Extent1].[LastName] AS [LastName],
[Extent1].[FirstName] AS [FirstName],
[Extent1].[EnrollmentDate] AS [EnrollmentDate],
'0X0X' AS [C1],
[Join1].[EnrollmentID] AS [EnrollmentID],
[Join1].[CourseID1] AS [CourseID],
[Join1].[PersonID] AS [PersonID1],
[Join1].[Grade] AS [Grade],
[Join1].[CourseID2] AS [CourseID1],
[Join1].[Title] AS [Title],
[Join1].[Credits] AS [Credits],
[Join1].[DepartmentID] AS [DepartmentID],
CASE WHEN ([Join1].[EnrollmentID] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C2]
FROM [dbo].[People] AS [Extent1]
LEFT OUTER JOIN (SELECT [Extent2].[EnrollmentID] AS [EnrollmentID], [Extent2].[CourseID] AS [CourseID1], [Extent2].[PersonID] AS [PersonID], [Extent2].[Grade] AS [Grade], [Extent3].[CourseID] AS [CourseID2], [Extent3].[Title] AS [Title], [Extent3].[Credits] AS [Credits], [Extent3].[DepartmentID] AS [DepartmentID]
FROM [dbo].[Enrollments] AS [Extent2]
INNER JOIN [dbo].[Courses] AS [Extent3] ON [Extent2].[CourseID] = [Extent3].[CourseID] ) AS [Join1] ON [Extent1].[PersonID] = [Join1].[PersonID]
WHERE ([Extent1].[Discriminator] = 'Student') AND ([Extent1].[PersonID] = @p__linq__0)
) AS [Project1]
ORDER BY [Project1].[PersonID] ASC, [Project1].[C2] ASC}