我试图通过一个值来过滤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();