我有以下的委託聲明:傳遞委託LINQ查詢在EF核心
private Func<Employee, bool> _exclude;
然後在其他地方我的代碼並將其值設爲這樣的:
_exclude = (subject) =>
!subject.IsDeleted && subject.Location.Department.Company.GroupId.Equals(_groupId);
目標是重用過濾所有查詢。如果我要兌現這樣的僱員情況也能正常工作:
Employee theEmployee = db.Employees
.Include(e=>e.Location)
.ThenInclude(e => e.Department)
.ThenInclude(e => e.Company)
.Where(e => e.EmployeeId == EmployeeId && _exclude(e))
.FirstOrDefault();
但當我只是想找回一個值,例如像失敗,僱員:
string employeeId = db.Employees
.Include(e=>e.Location)
.ThenInclude(e => e.Department)
.ThenInclude(e => e.Company)
.Where(e => e.EmployeeId == EmployeeId && _exclude(e))
.Select(e => e.EmployeeId)
.FirstOrDefault();
的上面的失敗在Func委託中產生一個NullReferenceException _exclude因爲subject.Location值爲null,這意味着傳遞給委託的僱員沒有按照包含完全物化。
當需要一個完整的員工但成功投影查詢失敗時成功實現員工圖的原因是什麼,或者在這種情況下如何組成查詢?
我使用EF核心
檢查數據,就看你是路過該員工的位置,我認爲正在發生的事情是,有沒有連接一個員工的位置 – Zinov
@Zinov,每個員工都有一個位置,它在後端是必填字段。請記住,對於完整的員工來說,它工作得很好,如果不是,它也會失敗。 –
使用'Func <...>'而不是'Expression>'的任何原因? –