如何构建生成多条件或运算的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
相关产品推荐
相关产品推荐

