LinqKit PredicateBuilder returns all or non rows

China☆狼群 提交于 2019-11-30 08:41:37

问题


I'm beginning to use LinqKit's PredicateBuilder to create predicate's with OR conditions which is not possible with Linq expressions.

The problem I'm facing is if I begin with PredicateBuilder.True<MyEntity>() it returns all rows and if I begin with PredicateBuilder.False<MyEntity>() it returns non rows, apart from what expressions I use! look at the code below:

        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;
        }

It should return the rows which has IsActive == true, but it returns all rows!

I have tried all the possible combinations of PredicateBuilder.True | PredicateBuilder.False with And | Or methods, non of them works!


回答1:


The And extension-method does not modify the original predicate - it returns a new predicate representing the original predicate ANDed together with the specified predicate.

Effectively, your operations are not changing the predicate referred to by your pre variable, meaning you end up with either all or none of the records based on whether you initialized the original predicate to true or false.

Try:

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

If you are planning toOR predicates together, remember to start off with a false initial predicate.

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


来源:https://stackoverflow.com/questions/15325245/linqkit-predicatebuilder-returns-all-or-non-rows

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!