【问题标题】:Filtering navigation property in eager loading在急切加载中过滤导航属性
【发布时间】:2012-10-21 17:44:26
【问题描述】:

我一直在使用软删除,现在我想加载未“删除”的实体的导航属性。我找到了一种方法,这种方法的问题对我来说不是很清楚,还有另一种方法可以做到这一点。

Context.CreateSet().Include("Salary").Select(u => new {User= u, Salary = u.Salarys.Where(s => !s.Deleted)}).AsQueryable().Select(a => a.User).AsQueryable();

【问题讨论】:

标签: entity-framework-5


【解决方案1】:

预加载不支持过滤。您的代码可以简化为:

var users = Context.CreateSet<User>()
                   .Select(u => new {
                       User = u,
                       Salary = u.Salaries.Where(s => !s.Deleted)
                    })
                    .AsEnumerable()
                    .Select(a => a.User);

Include 不需要,因为您用自己的查询替换它,并且不需要AsQueryable,因为查询一直是IQueryable,直到调用AsEnumerable,它会在当选择用户和选择的薪水。 EF 将负责为您正确修复导航属性。

【讨论】:

  • 这是当前的解决方案,谢谢,但 EF 不支持更清晰的内容,这看起来像个技巧。
  • 是的,这是一个技巧,因为过滤导航属性is not supported
  • 如果工资是多对多关系,这个解决方案需要修改吗?我在一个新用例中对其进行了测试,但在用户尝试过滤具有多对多关系的导航属性时,它不起作用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-08
  • 1970-01-01
  • 1970-01-01
  • 2019-03-16
  • 1970-01-01
相关资源
最近更新 更多