使用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过滤器。我不确定这是否可能。
发布这篇文章后,我几乎立刻找到了问题的答案。为了实现我试图获得的目标,所需要的就是指定JoinType和Transformer。
QueryOver.Of<Person>()
.JoinQueryOver(p => p.Contact, JoinType.LeftOuterJoin)
.Where(c => c.isHome)
.TransformUsing(Transformers.DistinctRootEntity);
现在,我得到了所有只有家庭联系人的人