0

在 Fluent NHibernate 中,我有一个 A 类,有一个 IList 的孩子 B。

我想选择所有具有某个属性 B=="foo" 的子 B 的 A

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

得到这个的查询表达式是什么?

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

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

4

2 回答 2

1

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

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

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

于 2012-09-19T15:53:18.170 回答
0

NHibernate永远不会检索半加载的集合。

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

于 2012-09-19T15:45:58.237 回答