6

我开始使用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方法,没有一个有效!

4

2 回答 2

14

And扩展方法不会修改原始谓词 - 它返回一个谓词,表示原始谓词AND与指定的谓词一起。

实际上,您的操作不会更改变量引用的谓词,这意味着根据您是否将原始谓词初始化为or 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);
于 2013-03-10T17:37:00.570 回答
0

正如 Ani 所说,您忘记分配 pre

pre = pre.And(m => m.IsActive);
于 2019-12-04T06:34:37.450 回答