您可以通过一对多关系的多个部分中的值过滤 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();
我正在尝试通过一对多关系的多个部分中的值来过滤 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();