使用 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);
现在我得到所有的人只有他们的家庭联系方式
我想编写一个查询来过滤我的 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);
现在我得到所有的人只有他们的家庭联系方式