使用QueryOver筛选子集合

本文关键字:子集合 筛选 QueryOver 使用 | 更新日期: 2023-09-27 18:28:53

我想写一个查询,在QueryOver中过滤基类型的子集合。例如

class Person{
    List<Contact> contacts;
}
class Contact{
    string PhoneNumber;
    bool isHome;
}

然后

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

我想返回所有的人,并让每个人的联系人集合只填充联系人,这是真的。

我试过变形金刚,试图得到正确的结果。DistinctRootEntity转换器没有在子集合上保留所需的筛选器。AliasToEntityMap返回正确的行,但返回的结果是Dictionary,而不是Root类型。

我正在尝试更换使用的NHibernate过滤器。我不确定这是否可能。

使用QueryOver筛选子集合

发布这篇文章后,我几乎立刻找到了问题的答案。为了实现我试图获得的目标,所需要的就是指定JoinType和Transformer。

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

现在,我得到了所有只有家庭联系人的人