QueryOver其中child不为null

时间:2013-08-29 09:39:46

标签: c# nhibernate queryover

我正在尝试获得一个结果,如果子元素不为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();

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

1 个答案:

答案 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