using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Linq.Expressions; namespace AddWhere { public static class PredicateExtensions { public static Expression> True() { return f => true; } public static Expression> False() { return f => false; } public static Expression> Or(this Expression> expression1, Expression> expression2) { var invokedExpression = Expression.Invoke(expression2, expression1.Parameters.Cast()); return Expression.Lambda> (Expression.Or(expression1.Body, invokedExpression), expression1.Parameters); } public static Expression> And(this Expression> expression1, Expression> expression2) { var invokedExpression = Expression.Invoke(expression2, expression1.Parameters.Cast()); return Expression.Lambda> (Expression.And(expression1.Body, invokedExpression), expression1.Parameters); } } }