2013-08-29 36 views
0

我試圖得到一個結果,只有返回父級如果孩子不爲空。我是新來的NHibernate和QueryOver語法很抱歉,如果這是完全錯誤的,但我試圖這樣的: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(); 

仍然沒有運氣,因爲我無論如何得到父行。我究竟做錯了什麼?我很確定我正在接近它錯誤,只是無法找出替代方案。

回答

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

+0

謝謝,此工作很好。 – Piercy