gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:50:58 26 4
gpt4 key购买 nike

我已经下载了 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com