嗨,我有上面的图片所示的关系表/模型。
老师可以参加多次培训。培训/课程可以是正式培训,也可以不是正式培训。 老师可能有很多学生。
现在,我想获取其老师参加过IsFormalTraining == true的课程的学生列表。
如何在.NET EF Core 2.2中做到这一点?
编辑:
型号:
Teacher
{
int Id;
string Name;
ICollection<TeacherStudent> students ;
}
TeacherStudent{
int Id;
int TeacherId;
int StudentId;
}
Student {
int Id;
string Name;
}
TeacherTraining{
int Id;
int TeacherId;
int CourseId;
DateTime StartDate;
}
Course {
int Id;
string Name;
}
答案 0 :(得分:1)
我根据您的课程进行一些假设,因此您可能需要测试和调整,但我想它看起来像这样:
var students =
context.Students.Where(s =>
context.Teachers.Any(t =>
t.Students.Any(st => st.StudentId == s.Id) && context.TeacherTraining.Any(tt =>
tt.TeacherId == t.Id &&
context.Course.Any(c => tt.CourseId == c.Id && c.IsFormalTraining))));
如果不装很多东西,我将无法调试它,因此您可能必须逐步完成它。您也可以将其分解为更多查询,易于阅读等,但是它可能不会非常有效(当然,我不知道没有运行测试的效率如何)。