我开始使用LinqKitPredicateBuilder创建具有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.FalseAnd | 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/

10-13 03:06