2012-03-10 59 views
5

大家好NHibernate的大師!限制在收集與脫節使用NHibernate QueryOver

鑑於這兩個類:

public class User { 
    long Id; 
    string Name; 
} 

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

我想這樣做使用QueryOver(不使用標準「魔術字符串」別名),以獲得具有USER1作爲所有者OR所有項目的查詢其中一位經理。

我知道如何分開:具有USER1作爲所有者

  • GET項目:session.QueryOver <>項目>>(),其中(P => p.Owner == USER1)
  • GET作爲管理者:session.QueryOver <>()JoinAlias(p值=> p.Managers,()=>管理器)。凡(()=>管理器== USER1)

我不不知道如何寫分解

如果有人出了個主意,這將幫助我很多。

由於提前,

克里斯

回答

2

喜歡的東西: -

User manager = null; 

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

編輯Name改變濾波器Id(如OP指出): -

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

EDIT2改變內到左邊使用

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

感謝, 事實上,我們必須做對的對象的ID,而不是對象 。凡平等(W => manager.Id == user1.Id || w.Owner.Id == user1.Id) Howover,這並沒有給出預期的結果,因爲它確實項目和用戶之間的內部連接,因此,沒有得到其USER1作爲所有者的項目,但沒有還沒有任何經理:( – Chris 2012-03-10 12:33:43

+0

對不起,我不是100%肯定你想要的篩選上你沒有提到你想要一個左連接... – Rippo 2012-03-10 12:39:48

+0

不要難過,你會不知道:) .Left.JoinAlias( ......)做到了。 非常感謝Rippo! – Chris 2012-03-10 13:33:42