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

Entity framework 如何使用Linq在.NET EF Core中进行查询?,entity-framework,linq,asp.net-core,ef-core-2.0,Entity Framework,Linq,Asp.net Core,Ef Core 2.0,您好,我有如上图所示的关系表/模型 教师可以接受多种培训。培训/课程可以是正式培训,也可以不是正式培训。 一个老师可能有很多学生 现在我想得到一份学生名单,他们的老师选修了IsFormalTraining==true的课程 如何在.NET EF Core 2.2中做到这一点 编辑: 型号: Teacher { int Id; string Name; ICollection<TeacherStudent> students ; } TeacherStude

您好,我有如上图所示的关系表/模型

教师可以接受多种培训。培训/课程可以是正式培训,也可以不是正式培训。 一个老师可能有很多学生

现在我想得到一份学生名单,他们的老师选修了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;
}
老师
{
int-Id;
字符串名;
i大学生;
}
教师学生{
int-Id;
内特教师;
国际学生;
}
学生{
int-Id;
字符串名;
}
教师培训{
int-Id;
内特教师;
int CourseId;
日期时间开始日期;
}
课程{
int-Id;
字符串名;
}

我根据您的类做了一些假设,因此您可能需要进行测试和调整,但我想它看起来会像这样:

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

我无法在不安装大量设备的情况下调试此程序,因此您可能需要逐步完成。您还可以将其分解为更多的查询,这样很容易阅读,等等,但可能效率不高(当然,如果不运行测试,我不知道效率有多高)。

您是否设置了实体类或上下文?您是先使用代码还是先使用数据库?如果我们想提供帮助,我们需要更多关于您当前实施的详细信息。我的表格太大,无法在此处显示,因此我使用此图表来解释我需要什么。是的,但您尝试了什么?如果看不到任何代码,就很难解决您的特定问题。这有关于如何构造问题的更多细节:ok。。我已经添加了代码。如果没有所有必需的导航属性,就不能这样做。请先添加它们。然后展示您如何尝试使用,这样我们就知道映射配置是正确的。否则我们会继续兜圈子。