Sie können EF verwenden, um im Grunde die gleichen Abfragen zu erstellen, die in der Frage gepostet wurden. Ich begann mit der Erstellung eines Poco-Modells EmployeePrivilege mit Eigenschaften:int PrivilegeID &int EmployeeID. Ich habe dies nicht zum DbContext hinzugefügt.
var EmpPrivQuery = ctx.Privileges
.Where(p => p.PrivilegeName == "P3")
.SelectMany(p => p.Employees, (p, e) => new EmployeePrivilege{EmployeeID = e.EmployeeID, PrivilegeID = p.PrivilegeID}
.Distinct();
var employeesMissingPrivilege = from e in Employees
join epq in EmpPrivQuery
on e.EmployeeID equals epq.EmployeeID
into jointable
where jointable.Count()==0
select e;
Ich habe gerade festgestellt, dass Sie das gleiche Ergebnis auch erhalten können, ohne das poco EmployeePrivilege wie folgt zu erstellen:
var EmpPrivQuery = ctx.Privileges
.Where(p => p.PrivilegeName == "P3")
.SelectMany(p => p.Employees.Select(e => e.EmployeeID)
.Distinct();
var employeesMissingPrivilege = from e in Employees
join epq in EmpPrivQuery
on e.EmployeeID equals epq
into jointable
where jointable.Count()==0
select e;
Diese beiden EF-Abfragen geben Mitarbeiter zurück, denen bestimmte Berechtigungen sowohl für SQL Server als auch für Oracle (unter Verwendung von dotConnect für Oracle von Devart) fehlen.
Viele Beiträge, die ich gelesen habe, beziehen sich auf die Verwendung von DefaultIfEmpty()
um einen linken äußeren Join zu erreichen. Die obigen Abfragen funktionieren, aber bitte posten Sie, ob es einen besseren Weg zu diesem Ergebnis gibt, indem Sie DefaultIfEmpty()
verwenden .