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;
}
}
}