我一直在使用軟刪除,現在我想加載我的實體的導航屬性不是「刪除」。我找到了一種方法,這樣我的問題不是爲我清楚,還有另一種方法來做到這一點。正在加載過濾導航屬性
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