1

我有这两个对象:

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>();

但是我遇到了一个异常,无法将 Child 类型的对象转换为 Parent。

QueryOver 从父实体开始但返回子实体的正确形式如何?

4

1 回答 1

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

于 2013-04-16T14:36:22.043 回答