Entity Framework-在包含之后使用where()过滤行

问题描述 投票:0回答:2

如果我有以下两个对象或模型:

   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子句。

c# asp.net-mvc entity-framework linq
2个回答
0
投票

您需要采用另一种方法,即选择未删除的学生,然后从他们中投影学校:

var school = DatabaseContext.Students
                 .Where(s => !s.Deleted)
                 .Select(s => s.School)
                 .Distinct()
                 .FirstOrDefault();

这取决于School类的Student属性,该属性在您的模型中不存在,可能已被忘记。


0
投票

它确实有效,但是您将需要第三方库-EntityFramework不支持过滤的包含,我认为是EF Core(在待办事项列表中为iirc)。

where子句可以过滤,但只能过滤出顶层的完整对象,然后将include扩展到子元素。

您想要的是包括过滤或全局查询过滤器(过滤掉所有被删除的学生,除非我告诉您不要这样做。

[https://entityframework-classic.net/做到了(免费,ef的分支)

© www.soinside.com 2019 - 2024. All rights reserved.