You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何构建生成多条件或运算的Expression表达式?

构建多条件逻辑或的Expression表达式

首先要明确:C#里的||对应Expression.OrElse方法(短路逻辑或),而Expression.Or是按位或,别搞混。要实现多个条件的连续或,只需要迭代拼接——先把前两个条件用OrElse组合,再把组合结果和第三个条件用OrElse组合,以此类推即可。

下面是完整实现代码:

using System;
using System.Linq.Expressions;

public class MyClass
{
    public string Parameter1 { get; set; }
    public string Parameter2 { get; set; }
    public string Parameter3 { get; set; }
}

class Program
{
    static void Main()
    {
        // 1. 创建参数表达式 x
        ParameterExpression param = Expression.Parameter(typeof(MyClass), "x");
        
        // 2. 定义要匹配的目标文本
        string targetText = "Some text";
        
        // 3. 创建单个相等条件的表达式列表
        var conditions = new[]
        {
            Expression.Equal(
                Expression.Property(param, nameof(MyClass.Parameter1)),
                Expression.Constant(targetText)
            ),
            Expression.Equal(
                Expression.Property(param, nameof(MyClass.Parameter2)),
                Expression.Constant(targetText)
            ),
            Expression.Equal(
                Expression.Property(param, nameof(MyClass.Parameter3)),
                Expression.Constant(targetText)
            )
        };
        
        // 4. 循环拼接所有条件为连续的OrElse表达式
        Expression combinedCondition = conditions[0];
        for (int i = 1; i < conditions.Length; i++)
        {
            combinedCondition = Expression.OrElse(combinedCondition, conditions[i]);
        }
        
        // 5. 构建最终的Lambda表达式
        Expression<Func<MyClass, bool>> lambda = Expression.Lambda<Func<MyClass, bool>>(combinedCondition, param);
        
        // 输出验证表达式结构
        Console.WriteLine(lambda.ToString());
        // 输出结果:x => ((x.Parameter1 == "Some text") OrElse (x.Parameter2 == "Some text")) OrElse (x.Parameter3 == "Some text")
        // 括号不影响逻辑执行,和目标语句功能完全一致
    }
}

关键说明:

  • 参数表达式:用Expression.Parameter创建x参数,指定类型和名称。
  • 单个条件:通过Expression.Equal生成每个属性与目标文本的相等判断表达式。
  • 多条件拼接:循环遍历条件列表,每次将当前组合结果与下一个条件用OrElse合并,支持任意数量的条件。
  • Lambda包装:用Expression.Lambda将拼接后的条件与参数包装成最终的Lambda表达式。

内容的提问来源于stack exchange,提问作者Arthur Edgarov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 11:16:55