0

我试图得到一个只在孩子不为空时才返回父母的结果。我是 nhibernate 和 QueryOver 语法的新手,如果这完全错误,我很抱歉,但我尝试了这个:

return session.QueryOver<Parent>().Where(x => x.Child != null).SingleOrDefault();

但是,这仍然返回父行。然后我尝试了以下方法:

Child child = null;
return session.QueryOver<Parent>()
.JoinAlias(x => x.Child, () => child)
.Where(() => child.Name != null)
.And(x=>x.Id == id).SingleOrDefault();

仍然没有运气,因为无论如何我都得到了父行。我究竟做错了什么?我很确定我接近它是错误的,只是无法找到替代方案。

4

1 回答 1

3

基本查询应该是这样的:

Parent parentAlias = null;
Child childAlias = null;

return session.QueryOver<Parent>(() => parentAlias).WithSubquery
      .WhereExists(QueryOver.Of<Child>(() => childAlias)
         .Where(() => parentAlias.Id == childAlias.Parent.Id)
         .Select(c => childAlias.Id))
      .SingleOrDefault();

请注意别名的使用,以及我通过使用子查询解决了您的查询的事实。请注意,即使在子查询中,“连接条件”也必须手动“插入”(我使用过parentAlias.Id == childAlias.Parent.Id

于 2013-08-29T09:49:46.560 回答