Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

cách truy vấn nhiều đến nhiều đối với trường hợp không có bản ghi bằng EF5

Bạn có thể sử dụng EF để tạo về cơ bản các truy vấn giống được đăng trong câu hỏi. Tôi bắt đầu bằng cách tạo một mô hình poco EmployeePrivilege với các thuộc tính:int PrivilegeID &int EmployeeID. Tôi đã không thêm cái này vào 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;

Tôi vừa nhận ra rằng bạn cũng có thể nhận được kết quả tương tự mà không cần tạo poco EmployeePrivilege như sau:

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;

Cả hai truy vấn EF này đều trả về Nhân viên thiếu các đặc quyền được chỉ định đối với cả Sql Server và Oracle (sử dụng dotConnect của Devart cho Oracle).

Nhiều bài đăng mà tôi đã đọc tham khảo bằng cách sử dụng DefaultIfEmpty() để đạt được kết nối bên ngoài bên trái. Các truy vấn trên hoạt động, tuy nhiên, vui lòng đăng nếu có cách tốt hơn để đạt được kết quả này bằng cách sử dụng 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. Làm thế nào để trả về các hàng dựa trên người dùng cơ sở dữ liệu và nội dung của bảng?

  2. Chọn CLOB trong Oracle bằng C và SQL nhúng

  3. Oracle:Cách tạo một phần tử trong một không gian tên cụ thể với XMLElement ()

  4. Cách thêm 'ON DELETE CASCADE' trong câu lệnh ALTER TABLE

  5. Cách tạo thủ tục lưu trữ Oracle có thể trả về các thực thể cụ thể cũng như tất cả các thực thể