2013-03-10 12 views
6

LinqKitPredicateBuilderを使用して、Linq式では不可能なOR条件で述語を作成し始めています。私はPredicateBuilder.True<MyEntity>()それ戻ってすべての行で始まる場合LinqKit PredicateBuilderがすべてまたは非行を返します

私が直面してる問題があると私はPredicateBuilder.False<MyEntity>()で始まる場合、それは私が使用しているものの表現とは別に、非行を返します!次のコードを見てください:

 var pre = PredicateBuilder.True<MyEntity>(); 
     pre.And(m => m.IsActive == true); 

     using (var db = new TestEntities()) 
     { 
      var list = db.MyEntity.AsExpandable().Where(pre).ToList(); 
      dataGridView1.DataSource = list; 
     } 

IsActive == trueの行を返すはずですが、すべての行を返します。

私はすべての可能な組み合わせを試しましたPredicateBuilder.True | PredicateBuilder.FalseAnd | Orメソッド、それ以外のものは動作します!

答えて

13

And拡張法は、元の述語を修正しない - それは、指定された述語と一緒に元の述語AND EDを表す新しい述語を返します。

効果的に、あなたの操作は、あなたがtrueまたはfalseにオリジナルの述語を初期化するかどうかに基づいてレコードのすべてまたはなしで終わる意味、あなたのpre変数が参照する述語を変更していません。

試してください:あなたが一緒にOR述語に計画している場合

var pre = PredicateBuilder.True<MyEntity>(); 
    pre = pre.And(m => m.IsActive); 

false初期述語とオフを開始することを忘れないでください。

var pre = PredicateBuilder.False<MyEntity>(); 
    pre = pre.Or(m => m.IsActive); 
+0

OMG !!それは愚かな間違いです。 3年前に 'string.Replace'メソッドについて同じミスをしました!!!どうもありがとうございました。 – Ashkan

+0

説明をありがとう – leen3o

関連する問題