可以通过一对多关系中的多个部分的值来过滤实体框架DBSet吗?



我试图通过一个值来过滤DbSet,该值是一对多关系的许多部分。例如,我需要得到学生的全部名单。每个学生可以上很多课。我需要根据他们是否有特定的课程来筛选学生。

在上下文文件中我有;

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

发生的事情是,当我尝试过滤类时,它返回所有学生,但只列出类gym。我需要的是所有学生的列表,其中一个类是gym。

最终输出是一个Web API。我希望我解释得够清楚了。谢谢你的帮助。

如果你想让学生任何的班级都是"GYM"

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

最新更新