2013-03-10 32 views
6

我开始使用LinqKitPredicateBuilder来创建带有OR条件的谓词,这对Linq表达式来说是不可能的。LinqKit PredicateBuilder返回全部或非行

我面临的问题是,如果我有PredicateBuilder.True<MyEntity>()返回所有行开始,如果我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一个谓词。

实际上,您的操作不会被您pre变量改变提到了谓词,这意味着你最终的根据是否初始化原来的谓词truefalse记录要么全有或全无。

尝试:

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

如果您正计划OR谓词在一起,记得有false初始谓词开始。

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

OMG !!这是一个愚蠢的错误。我在3年前对'string.Replace'方法犯了同样的错误!!!非常感谢你。 – Ashkan 2013-03-10 17:44:15

+0

感谢您的澄清 – leen3o 2015-10-18 09:02:22