我开始使用 LinqKit的 PredicateBuilder使用 Linq 表达式无法实现的 OR 条件创建谓词。
我面临的问题是,如果我以 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/