Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

cara menanyakan banyak ke banyak karena tidak adanya catatan menggunakan EF5

Anda dapat menggunakan EF untuk membuat kueri yang pada dasarnya sama dengan yang diposting dalam pertanyaan. Saya mulai dengan membuat model poco EmployeePrivilege dengan properti:int PrivilegeID &int EmployeeID. Saya tidak menambahkan ini ke 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;

Saya baru sadar Anda juga bisa mendapatkan hasil yang sama tanpa membuat Poco EmployeePrivilege sebagai berikut:

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;

Kedua kueri EF ini mengembalikan Karyawan yang kehilangan hak istimewa tertentu terhadap Sql Server dan Oracle (menggunakan dotConnect untuk Oracle dari Devart).

Banyak postingan yang saya baca merujuk menggunakan DefaultIfEmpty() untuk mencapai gabungan luar kiri. Kueri di atas berfungsi, namun, harap posting jika ada cara yang lebih baik untuk hasil ini menggunakan DefaultIfEmpty() .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Temukan sumber data untuk tabel tertentu - ORACLE

  2. if (pilih count(kolom) dari tabel)> 0 maka

  3. hapus catatan lama yang dikelompokkan berdasarkan tiga kolom dan pesan berdasarkan tanggal

  4. Menjalankan Prosedur Tersimpan Dari JMeter

  5. Bagaimana cara menulis kebijakan di Oracle SQL yang membatasi akses ke non-pemilik untuk sebuah tabel?