在流利的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”。
答案 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,请使用投影。