2011-01-28 56 views
0

嗨我有一個問題,使條件查詢工作。我想要project.Parent爲null的所有項目,或者如果它有一個父項,那麼它不應該被無效或關閉。在同一個表/對象上的Linq條件查詢

我的例子不會帶回任何project.Parent == null的項目。

我們使用LINQ到NHibernate的

var projects = (from project in this.Session.Query<Project>() 
       where project.IsClosed == false 
        && project.IsVoided == false 
        && (project.Parent == null 
        || (project.Parent.IsVoided == false 
         && project.Parent.IsClosed == false)) 
       select project).ToList(); 
+0

您可以發佈,它的生成SQL?你使用的是什麼RDBMS? – 2011-01-28 14:27:29

+0

也可能有一些樣本數據。 – 2011-01-28 14:41:02

回答

0

該查詢不起作用,因爲爲Parent屬性生成了內部連接。

最簡單的解決方法是做兩個查詢,並加入他們的客戶端:

var projects = (from project in this.Session.Query<Project>() 
       where project.IsClosed == false 
        && project.IsVoided == false 
        && project.Parent == null 
       select project) 
       .AsEnumerable() 
       .Concat(
       (from project in this.Session.Query<Project>() 
       where project.IsClosed == false 
        && project.IsVoided == false 
        && project.Parent.IsVoided == false 
        && project.Parent.IsClosed == false 
       select project)) 
       .ToList(); 
0

我建議獲取所有項目,並檢查發生了什麼,應該是空的項目。沒有任何示例數據等,我必須猜測造成問題的原因。我會說項目父母初始化時有一些空的狀態。

0

做好加入客戶端不需要:

var projects = (from project in this.Session.Query<Project>() 
      where project.Parent == null || (project.IsClosed == false 
       && project.IsVoided == false) 
       && (project.Parent == null 
       || (project.Parent.IsVoided == false 
        && project.Parent.IsClosed == false)) 
      select project).ToList();