2011-01-28 12 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を使用していますか? –

+0

多分サンプルデータです。 –

答えて

0

Parentプロパティの内部結合が生成されるため、このクエリは機能しません。

最も簡単な回避策は2つのクエリを実行し、それらをクライアント側に参加している:

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

それを機能させる唯一の方法のようです。私は答えとしてマークします。必ずしもクエリーではありませんが、2つのクエリーを実行します。 – user593895

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();