【问题标题】:Combining Func<bool> expressions [duplicate]组合 Func<bool> 表达式[重复]
【发布时间】:2012-11-11 22:55:22
【问题描述】:

可能重复:
Combining two expressions (Expression<Func<T, bool>>)

我有一个方法接受一个 Expression&lt;Func&lt;bool&gt;&gt; 参数

void MethodOne(Expression<Func<bool>> expression)

我有多个Expression&lt;Func&lt;bool&gt;&gt; 实例。如何使用Expression.OrElse 将这些表达式动态组合成一个Expression&lt;Func&lt;bool&gt;&gt;(即构建表达式树)?

例如,如果我有两个表达式,例如

() => objectA.PropertyOneIsSet

和

() => objectB.PropertyTwoIsSet

我希望最终结果是:

() => objectA.PropertyOneIsSet || objectB.PropertyTwoIsSet

所以我可以将它传递给我上面的方法。

【问题讨论】:

  • 查看this question,这似乎包含您的问题...
  • 有件事我忘了说:我有 N 个这样的表达式(超过 2 个),我想 OrElse 全部。

标签: c# expression-trees


【解决方案1】:

您可以创建 ExpressionVisitor 来组合查询。查看此 msdn 博客以获取更多信息:Combining Predicates(答案 3)。他在谈论 EF,但你可以在你的情况下使用它

【讨论】:

    【解决方案2】:

    您可以使用表达式.Any(x => x.CallMethod) 来实现此目标。

    【讨论】:

    • 我需要有选择地组合表达式,即我不想总是在最终结果中包含所有表达式。类似if(someCondition) { result = result.OrElse(expressionN); }
    • 您需要根据一些业务规则/逻辑动态地准备这个表达式集合。但要使用 Any 扩展方法执行聚合集合。
    • 我需要将结果作为 Func> 的实例。 Any() 将只返回一个布尔值。
    • 那么你需要这样的东西:albahari.com/nutshell/predicatebuilder.aspx
    猜你喜欢
    • 2010-10-02
    • 2019-11-26
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    相关资源
    最近更新 更多