如果我有以下两个对象或模型:
class School
{
ICollection<Student> students { get; set; }
}
class Student
{
string Name { get; set; }
bool Deleted { get; set; }
}
试图使用仅未删除学生的学校时,如何使用where子句无法正常工作?
var school = DatabaseContext.Schools
.Include(x => x.Students)
.Where(y => !y.Deleted).FirstOrDefault();
where子句是否应过滤未删除的学生?如果不使用任何第三方库,也不允许在include内使用where子句。
您需要采用另一种方法,即选择未删除的学生,然后从他们中投影学校:
var school = DatabaseContext.Students
.Where(s => !s.Deleted)
.Select(s => s.School)
.Distinct()
.FirstOrDefault();
这取决于School
类的Student
属性,该属性在您的模型中不存在,可能已被忘记。
它确实有效,但是您将需要第三方库-EntityFramework不支持过滤的包含,我认为是EF Core(在待办事项列表中为iirc)。
where子句可以过滤,但只能过滤出顶层的完整对象,然后将include扩展到子元素。
您想要的是包括过滤或全局查询过滤器(过滤掉所有被删除的学生,除非我告诉您不要这样做。
[https://entityframework-classic.net/做到了(免费,ef的分支)