我开始使用LinqKit的PredicateBuilder创建具有OR条件的谓词,这对于Linq表达式是不可能的。
我面临的问题是,如果我以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.False
的And
| Or
方法,没有一个可以使用! 最佳答案
And
扩展方法不会修改原始谓词-它返回一个新谓词,该谓词表示原始谓词AND
ed与指定谓词一起。
实际上,您的操作不会更改pre
变量所引用的谓词,这意味着根据您是将原始谓词初始化为true
还是false
来结束所有记录,也可能没有记录。
尝试:
var pre = PredicateBuilder.True<MyEntity>();
pre = pre.And(m => m.IsActive);
如果您打算一起使用
OR
谓词,请记住从false
初始谓词开始。 var pre = PredicateBuilder.False<MyEntity>();
pre = pre.Or(m => m.IsActive);
关于c# - LinqKit PredicateBuilder返回所有或非行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15325245/