2012-03-10 25 views
5

Xin chào tất cả các chuyên gia NHibernate!Hạn chế đối với bộ sưu tập có sự tháo rời bằng cách sử dụng NHibernate QueryOver

Với hai loại cổ phiếu này:

public class User { 
    long Id; 
    string Name; 
} 

public class Project { 
    long Id; 
    User Owner; 
    IList<User> Managers; 
    ... 
} 

Tôi muốn làm một truy vấn sử dụng QueryOver (không sử dụng tiêu chí "kỳ diệu chuỗi" bí danh), để có được tất cả các dự án có user1 như Chủ đầu tư HOẶC như một trong những người quản lý.

Tôi biết làm thế nào để riêng:

  • dự án get có user1 như Chủ đầu tư:. Session.QueryOver <> Dự án >>() ở đâu (p => p.Owner == user1)
  • get như một người quản lý:. session.QueryOver <>() JoinAlias ​​(p => p.Managers,() => Quản lý) .Where (() => Quản lý == user1)

nhưng I don' t biết làm thế nào để viết các disjunction.

Nếu ai đó có ý tưởng, nó sẽ giúp tôi rất nhiều.

Cảm ơn trước,

Chris

Trả lời

2

Cái gì như: -

User manager = null; 

var query = session 
    .QueryOver<Project>() 
    .JoinAlias(j => j.Managers,() => manager) 
    .Where(w => manager.Name == user1 || w.Owner == user1) 
    .List<Project>(); 

chỉnh sửa để thay đổi bộ lọc Name-Id (như OP chỉ ra): -

.Where(w=>manager.Id == user1.Id || w.Owner.Id == user1.Id) 

edit2 thay đổi bên trong để sử dụng trái

.JoinAlias(j => j.Managers,() => manager).left 
+0

Cảm ơn, Trong thực tế chúng ta phải thực hiện bình đẳng về ID của đối tượng và không phải trên đối tượng .Where (w => manager.Id == user1.Id || w.Owner.Id == user1.Id) Làm thế nào, điều này không đưa ra kết quả mong đợi vì nó tham gia bên trong giữa Dự án và Người dùng, và do đó, không nhận các dự án có user1 làm chủ sở hữu nhưng chưa có bất kỳ người quản lý nào :( – Chris

+0

Xin lỗi tôi không chắc chắn 100% những gì bạn muốn lọc và bạn không đề cập đến việc bạn muốn tham gia ... – Rippo

+0

Đừng xin lỗi, bạn không thể biết :) .Left.JoinAlias ​​(...) đã làm các trick. Cảm ơn rất nhiều Rippo! – Chris

Các vấn đề liên quan