2013-04-16 139 views
1

我有這2個對象:QueryOver子集合從父

public class Parent 
{ 
    public virtual int Poid { get; set; } 
    public virtual IEnumerable<Child> Child { get; set; } 
} 

public class Child 
{ 
    public virtual int Poid { get; set; } 
    public virtual string Name {get; set;}  
} 

我想用NHibernet QueryOver API基於父ID和子ID來獲得一個孩子,這意思是這樣給我的孩子Id = x屬於Id = y的父項。

我想是這樣的:

return Session.QueryOver<Parent>().Where(p => p.Poid == y) 
       .JoinQueryOver(p => p.WishesLists) 
       .Where(c => c.Poid == x) 
       .SingleOrDefault<Child>(); 

但我發現了一個異常是不可能類型的子對象轉換父。

QueryOver從父實體開始但返回一個子實體的正確形式如何?

+0

'Child'是否具有對父對象的映射引用?那就是'Child.Parent'可用嗎? –

+0

感謝您的回覆,但並非沒有,孩子不必不知道父母。我解決了@ jamie-ide的問題。 – Diego

回答

1

我不知道這是可能的與QueryOver,我工作了一段時間沒有得到任何地方。這可能與LINQ:

var child = session.Query<Parent>() 
        .Where(p => p.Poid == y) 
        .SelectMany(p => p.WishesLists) 
        .SingleOrDefault(c => c.Poid == x); 

我非常喜歡LINQ語法而不是QueryOver。

另請參見NH-3176

+0

謝謝@Jamie我用QueryOver嘗試過也沒有成功,但我意識到使用LINQ語法更簡單,您的答案可以幫助我。謝謝 – Diego