Nhibernate 如何基于属性选择父对象和一个子对象?

Nhibernate 如何基于属性选择父对象和一个子对象?,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,在流利的NHibernate中,我有一个a班,一个B班的孩子 我想选择所有A,其中有一个具有特定属性B==“foo”的子B 我不想让A的其他孩子回来 什么是查询表达式来获取此信息 var list = session.Query<A>() .FetchMany(a=>a.B) .Where( a=>childBs.Any(b=>b=="foo")); var list=session.Query() .FetchMany(a=>a.B) 其中(a=>chi

在流利的NHibernate中,我有一个a班,一个B班的孩子

我想选择所有A,其中有一个具有特定属性B==“foo”的子B

我不想让A的其他孩子回来

什么是查询表达式来获取此信息

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

但这将返回所有的子B,而不仅仅是“foo”一个。

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


如果你想用一个A和一个B来检索一个A,使用投影。

有一些难看的方法可以让它做你想做的事情(在集合中使用过滤器),但我不推荐它。为什么不反向查询并执行以下操作:

var list = session.QueryOver<B>()
             .Where(b => b.B == "foo")
             .Fetch(b => b.A).Eager
             .List();
var list=session.QueryOver()
.其中(b=>b.b==“foo”)
.Fetch(b=>b.A).渴望
.List();

它不能完全满足您的需要(如果您访问b.A.ChildBs,它将加载该集合),但它将检索您正在查找的数据(假设您具有从b到A的关系)

您能给出一个使用投影的示例吗?我是FNH的新手。