如何根据属性选择父母和一个孩子?

时间:2012-09-19 15:02:55

标签: nhibernate fluent-nhibernate

在流利的NHibernate中,我有一个A级,有一个儿童B的IList。

我想选择所有具有特定属性的孩子B的A B ==“foo”

我不想找回A的任何其他孩子。

获取此内容的Query表达式是什么?

var list = session.Query<A>()
  .FetchMany(a=>a.B)
  .Where( a=>childBs.Any(b=>b=="foo"));

但是这会返回所有的孩子B,而不仅仅是“foo”。

2 个答案:

答案 0 :(得分:1)

有一些丑陋的黑客可以让它做你想要的(使用集合上的过滤器),但我不推荐它。为什么不反转查询并执行:

var list = session.QueryOver<B>()
             .Where(b => b.B == "foo")
             .Fetch(b => b.A).Eager
             .List();

它不会完全符合您的要求(如果您访问bAChildBs它将加载该集合),但它将检索您正在寻找的数据(假设您有从B到A的关系)

答案 1 :(得分:0)

NHibernate将从不检索半载集合。

如果要使用一个B检索一个A,请使用投影。