c# - PredicateBuilder "And"方法不起作用

标签 c# entity-framework predicatebuilder

我已经下载了 predicate builder并且很难让它与 Entity Framework 一起工作。这是我的代码:v_OrderDetail 是实体

var context = new OrdersEntities();

Expression<Func<v_OrderDetail,bool>> whereClause = w => true;                                         
var predicate = PredicateBuilder.True<v_OrderDetail>();              
predicate.And(w => w.Status == "Work");                             
var results = context.v_OrderDetail.AsExpandable().Where(predicate);

当我查看结果时,我会返回每个订单。 And 谓词似乎不带。当我查看 predicate.parameters.count 时,它只显示 1。我不确定,但我希望在添加第二个后它会显示 2。

非常感谢任何帮助。

最佳答案

是因为predicate.And不修改 predicate , 它返回一个新的 Expression<Func<v_OrderDetail, bool>>反而。您需要将结果分配到某处,以便您可以使用它。

如果您执行以下操作,它将起作用:

predicate = predicate.And(w => w.Status == "Work");      

这里的问题是表达式树是不可变的。每次修改表达式树时,您都必须创建一个具有所需更改的全新树。

这是来自 How to modify expression trees 的相关摘录来自 MSDN。

Expression trees are immutable, which means that they cannot be modified directly. To change an expression tree, you must create a copy of an existing expression tree and when you create the copy, make the required changes. You can use the ExpressionVisitor class to traverse an existing expression tree and to copy each node that it visits.

关于c# - PredicateBuilder "And"方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5304585/

相关文章:

c# - A* 算法缺少计算

c# - Azure Web应用程序突然给出500个错误

C#:是否可以使用表达式或函数作为字典中的键?

c# - 使用 Entity Framework 和 MySQL 实现 MassTransit saga 持久性

entity-framework - SQL FileStream + Entity Framework存储大文件

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

lucene - Sitecore Search Predicate Builder 多关键字搜索与 boosting 无法按预期工作

javascript - 在 asp.net 中选择单选按钮值时隐藏/显示字段

sql-server - 从命令行迁移 Entity Framework

entity-framework - 向所有请求 EF6 添加 Where 条件