如何使用Linq在.NET EF Core中进行查询?

时间:2019-09-19 16:07:24

标签: entity-framework linq asp.net-core ef-core-2.0

My EF Diagram

嗨,我有上面的图片所示的关系表/模型。

老师可以参加多次培训。培训/课程可以是正式培训,也可以不是正式培训。 老师可能有很多学生。

现在,我想获取其老师参加过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;
}

1 个答案:

答案 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))));

如果不装很多东西,我将无法调试它,因此您可能必须逐步完成它。您也可以将其分解为更多查询,易于阅读等,但是它可能不会非常有效(当然,我不知道没有运行测试的效率如何)。