public static class PredicateBuilder
{
public static Expression> True() { return f => true; }
public static Expression> False() { return f => false; }
public static Expression> Or(this Expression> expr1,
Expression> expr2)
{
var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast());
return Expression.Lambda>
(Expression.Or(expr1.Body, invokedExpr), expr1.Parameters);
}
public static Expression> And(this Expression> expr1,
Expression> expr2)
{
var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast());
return Expression.Lambda>
(Expression.And(expr1.Body, invokedExpr), expr1.Parameters);
}
}