我正在尝试获得一个结果,如果子元素不为null,则只返回父元素。我是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();
仍然没有运气,因为我还是得到了父排。我究竟做错了什么?我很确定我接近它是错误的,只是无法找到替代方案。
答案 0 :(得分: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
)