Ich habe folgende Delegatendeklaration:zu Linq-Abfrage in EF Core-Passing Delegierten
_exclude = (subject) =>
!subject.IsDeleted && subject.Location.Department.Company.GroupId.Equals(_groupId);
Ziel ist es, die Wiederverwendung der:
private Func<Employee, bool> _exclude;
dann an anderer Stelle in meinem Code ich den Wert auf diesen Satz über alle Abfragen filtern. Das funktioniert gut, wenn ich werde einen Mitarbeiter weist wie folgt materialisieren:
Employee theEmployee = db.Employees
.Include(e=>e.Location)
.ThenInclude(e => e.Department)
.ThenInclude(e => e.Company)
.Where(e => e.EmployeeId == EmployeeId && _exclude(e))
.FirstOrDefault();
aber es funktioniert nicht, wenn ich wollte nur einen einzigen Wert abgerufen werden, wie zum Beispiel EmployeeId:
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();
Die oben schlägt fehl, eine NullReferenceException in der Func-Delegat _exclude, weil subject.Location-Wert ist Null, das bedeutet, dass der Mitarbeiter an den Delegaten übergeben ist nicht vollständig materialisiert gemäß Includes.
Was kann die Ursache dafür sein, dass das Mitarbeiterdiagramm erfolgreich erstellt wird, wenn ein vollwertiger Mitarbeiter benötigt wird, aber für die Projektionsabfrage fehlschlägt oder wie sollte die Abfrage in diesem Fall zusammengesetzt sein?
Ich bin mit EF-Core
Überprüfen Sie die Daten, die Positionen dieser Mitarbeiter zu sehen, Sie sind vorbei, ich denke, was passiert ist, dass es nicht angebracht ist, ein Standort für einen Ihrer Mitarbeiter – Zinov
@Zinov, jeder Mitarbeiter hat einen Standort, es ist Pflichtfeld im Backend. Denken Sie daran, dass es für den vollen Angestellten großartig funktioniert, wenn es nicht auch scheitern sollte. –
Grund für die Verwendung von 'Func <...>' anstelle von 'Ausdruck>'? –