使用 QueryOver 过滤子集合

Filtering Sub Collections with QueryOver

我想编写一个查询来过滤我的 QueryOver 中基本类型的子集合。例如...

class Person{
    List<Contact> contacts;
}

class Contact{
    string PhoneNumber;
    bool isHome;
}

然后

QueryOver.Of<Person>()
 .JoinQueryOver(p => p.Contact)
 .Where(c => c.isHome);

我想要 return 所有人并让每个人的联系人集合仅填充联系人,即 isHome 是真实的。

我试过变形金刚,试图得到正确的结果。 DistinctRootEntity 转换器不会在子集合上保留预期的过滤器。 AliasToEntityMap returns 是正确的行,但结果是 returned 作为 Dictionary 而不是 Root 类型。

我正在尝试替换 NHibernate 过滤器的用法。我不确定这是否可行。

在发布这篇文章后,我几乎立即找到了问题的答案。要实现我试图获得的所有要求,请指定 JoinType 和 Transformer。

QueryOver.Of<Person>()
 .JoinQueryOver(p => p.Contact, JoinType.LeftOuterJoin)
 .Where(c => c.isHome) 
 .TransformUsing(Transformers.DistinctRootEntity);

现在我得到所有的人只有他们的家庭联系方式