c# - LinqKit PredicateBuilder 返回所有或非行

标签 c# entity-framework predicatebuilder linqkit

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

最佳答案

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

实际上,您的操作不会更改 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);

关于c# - LinqKit PredicateBuilder 返回所有或非行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15325245/

相关文章:

c# - 无法等待系统集合通用可枚举

c# - SQL Server to .Net Decimals with EF6 database first issue

LinqKit PredicateBuilder 与 EF 4 CPT 5 表关系?

c# - 非托管代码中的 ASP.NET Core 1.1 和 EF 6 异常

c# - 在 foreach 循环中使用 predicatebuilder 时遇到问题

c# - Unity封装,属性强制我重写变量名?

c# - 如何在不丢失纵横比的情况下在 Unity 中拉伸(stretch)某些东西?

c# - 是否存在用于多个更改的 `INotifyPropertyChanged` 版本?

c# - 如何忽略第一个小数点后的第一个值(如果它是 0),否则如果大于 0,则取它?