2010-05-06 54 views
3

我很難編寫一個標準來選擇具有空子集合或空的子集合的所有實體。我可以將這些作爲單獨的標準來執行,但我無法將其合併到單個標準中。nHibernate選擇具有空子集合的所有實體的標準

類結構:

public class Component 
    { 
     public IList<Version> Versions { get; set; } 
    } 

    public class Version 
    { 
     public IList<SubscribeEvent> SubscribedEvents { get; set; } 
     public IList<PublishEvent> PublishedEvent { get; set; } 
    } 

這不起作用:

return session 
       .CreateCriteria<Component>("c") 
       .CreateCriteria("Versions", "v") 
       .Add(Restrictions.Or(Restrictions.IsEmpty("c.Versions"), Restrictions.And(Restrictions.IsEmpty("v.PublishedEvents"), 
                         Restrictions.IsEmpty("v.SubscribedEvents")))) 
       .SetCacheable(true); 
+0

它不起作用?你是否遇到異常?你會得到意想不到的結果?沒有結果? – 2010-05-06 17:23:22

+0

什麼是生成的SQL? – dotjoe 2010-05-06 17:24:17

+0

這是返回錯誤的結果。 – AwkwardCoder 2010-05-06 17:28:52

回答

3

我已經成功地制定出一個解決方案,不知道這是否是最好的(我應該買NH分析器)

return session 
      .CreateCriteria<Component>("c") 
      .CreateAlias("Versions", "v", JoinType.LeftOuterJoin) 
      .Add(Restrictions.Or(Restrictions.IsEmpty("c.Versions"), 
           Restrictions.And(Restrictions.IsEmpty("v.SubscribedEvents"), 
                Restrictions.IsEmpty("v.PublishedEvents")))) 
      .SetCacheable(true); 
相關問題