在急切加载中过滤导航属性

时间:2012-10-21 09:29:07

标签: entity-framework-5

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

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

1 个答案:

答案 0 :(得分:4)

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

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-to-Objects。 EF将负责为您正确修复导航属性。