using System.Collections.Generic; namespace System.Linq.Expressions { public static class ExpressionHelper { /// /// 将多个条件 使用 OR 连接成一个表达式 /// /// /// 多个条件表达式 /// public static Expression> WhereOr( IReadOnlyList>> predicates) { if (predicates.Count == 0) return x => false; // no matches! if (predicates.Count == 1) return predicates[0]; // simple var param = Expression.Parameter(typeof(T), "x"); Expression body = Expression.Invoke(predicates[0], param); for (int i = 1; i < predicates.Count; i++) { body = Expression.OrElse(body, Expression.Invoke(predicates[i], param)); } var lambda = Expression.Lambda>(body, param); return lambda; } } }