2013-04-16 66 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