我一直在使用软删除,现在我想加载未“删除”的实体的导航属性。我找到了一种方法,这种方法我的问题对我来说不是很清楚,还有另一种方法可以做到这一点。
Context.CreateSet().Include("Salary").Select(u => new {User= u, Salary = u.Salarys.Where(s => !s.Deleted)}).AsQueryable().Select(a => a.User).AsQueryable();
我一直在使用软删除,现在我想加载未“删除”的实体的导航属性。我找到了一种方法,这种方法我的问题对我来说不是很清楚,还有另一种方法可以做到这一点。
Context.CreateSet().Include("Salary").Select(u => new {User= u, Salary = u.Salarys.Where(s => !s.Deleted)}).AsQueryable().Select(a => a.User).AsQueryable();
急切加载不支持过滤。您的代码可以简化为:
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 将负责为您正确修复导航属性。