Du kan använda EF för att skapa i princip samma frågor som postats i frågan. Jag började med att skapa en poco-modell EmployeePrivilege med egenskaper:int PrivilegeID &int EmployeeID. Jag har inte lagt till detta i DbContext.
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;
Jag insåg precis att du också kan få samma resultat utan att skapa Poco EmployeePrivilege enligt följande:
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;
Båda dessa EF-frågor returnerar Anställda som saknar specificerade privilegier mot både SQL Server och Oracle (med Devarts dotConnect för Oracle).
Många inlägg som jag läste hänvisade till med DefaultIfEmpty()
för att uppnå en vänster yttre sammanfogning. Frågorna ovan fungerar, men vänligen posta om det finns ett bättre sätt att få det här resultatet med DefaultIfEmpty()
.