您可以通过一对多关系的多个部分中的值过滤 Entity Framework DBSet 吗?

Can you filter an Entity Framework DBSet by a value in the many part of a one-to-many relationship?

我正在尝试通过一对多关系的多个部分中的值来过滤 DbSet。例如,我需要获取整个学生列表。每个学生可以有很多 classes。我需要根据学生是否有特定的 class.

来过滤他们

在我的上下文文件中;

modelBuilder.Entity<Student>()
            .HasMany(e => e.Classes)
            .WithOne(x => x.Student)
            .HasForeignKey(m => m.StudentId);

在服务文件中,我可能会按性别等属性过滤学生,这就是我使用 IQueryable<Student>:

的原因
IQueryable<Student> studentQuery = _context.Students;
studentQuery = studentQuery.Where(x => x.Gender == "MALE");
var students = await studentQuery
                         .Include(c => c.Classes.Where(c => c.className == "GYM"))
                         .ToListAsync();

发生的事情是,当我尝试过滤 classes 时,它 returns 所有学生,但只列出 class 体育馆。我需要的是所有学生的名单,其中 classes 是 GYM。

最终输出用于 Web API。我希望我对此解释得足够好。感谢您的帮助。

如果您希望学生 类 中 任何 是“GYM”:

var students = await studentQuery
        .Include(c => c.Classes)
        .Where(s => s.Classes.Any(c => c.className == "GYM")))
        .ToListAsync();