我一直在使用软删除,现在我想加载我的实体的导航属性不是“删除”。我找到了一种方法,这样我的问题不是为我清楚,还有另一种方法来做到这一点。正在加载过滤导航属性
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
这将sqitch到LINQ到 - 选择用户和选定工资时的对象。 EF将负责为您正确固定导航属性。
这里有一个工作软删除解决方案:http://stackoverflow.com/questions/12698793/soft-delete-entity-framework-code-first/18985828#18985828 – Colin