sql >> Databáze >  >> RDS >> Oracle

jak se dotazovat mnoho až mnoho na absenci záznamů pomocí EF5

EF můžete použít k vytvoření v podstatě stejných dotazů zveřejněných v otázce. Začal jsem vytvořením poco modelu EmployeePrivilege s vlastnostmi:int PrivilegeID &int EmployeeID. Nepřidal jsem to do 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;

Právě jsem si uvědomil, že stejného výsledku můžete získat také bez vytvoření poco EmployeePrivilege následovně:

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;

Oba tyto dotazy EF vracejí zaměstnance, kterým chybí specifikovaná oprávnění jak vůči SQL Server, tak Oracle (pomocí Devart's dotConnect for Oracle).

Mnoho příspěvků, které jsem četl, odkazovalo na použití DefaultIfEmpty() k dosažení levého vnějšího spojení. Výše uvedené dotazy však fungují, pokud však existuje lepší způsob, jak dosáhnout tohoto výsledku pomocí DefaultIfEmpty(), zveřejněte je .




  1. EXTRACT (datetime) Funkce v Oracle

  2. Připojení k databázi Oracle 10g přes R

  3. Vložit celý DataTable do databáze najednou místo řádek po řádku?

  4. Jaký je nejlepší vyhledávací algoritmus pro PHP a MYSQL?