sql >> Database >  >> RDS >> Oracle

hoe een veel-op-veel opvragen voor de afwezigheid van records met EF5

U kunt EF gebruiken om in principe dezelfde query's te maken die in de vraag zijn gepost. Ik ben begonnen met het maken van een poco-model EmployeePrivilege met eigenschappen:int PrivilegeID &int EmployeeID. Ik heb dit niet toegevoegd aan de 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;

Ik realiseerde me net dat je hetzelfde resultaat ook kunt krijgen zonder de poco EmployeePrivilege als volgt te maken:

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;

Beide EF-query's retourneren Werknemers die gespecificeerde privileges missen voor zowel Sql Server als Oracle (met behulp van Devart's dotConnect voor Oracle).

Veel berichten die ik las, verwezen naar het gebruik van DefaultIfEmpty() om een ​​left outer join te bereiken. De bovenstaande query's werken, maar post als er een betere manier is om dit resultaat te krijgen met DefaultIfEmpty() .




  1. .Net - Een on-demand recordset maken in plaats van alles in één keer in het geheugen te halen

  2. MySQL-limietresultaten per categorie

  3. SqlServer 2008 - Schakel Net Named Pipes in via de opdrachtregel

  4. XML ontleden met onbekende naamruimten in Oracle SQL