Linq: Crear inverso lógico de expresión
Me gustaría crear un método que acepte unExpression<Func<T, bool>>
y crea el inverso lógico (es decir, devolveríafalse
donde habría regresadotrue
, y viceversa. Esto es mucho más difícil de lo que pensaba. Aquí es donde estoy:
public static Expression<Func<T, bool>> Not<T>(this Expression<Func<T, bool>> expression)
{
return Expression.Lambda<Func<T, bool>>(Expression.Not(expression.Body));
}
Esto compila bien pero arroja la siguiente excepción cuando se llama:
Test method Tests.Common.Unit.LinqPredicateBuilderTests.CanInverseAPredicate threw exception:
System.ArgumentException: Incorrect number of parameters supplied for lambda declaration
No tengo ni idea de lo que estoy haciendo. ¿Alguien podría llenar los espacios en blanco?