Linq: Crie inverso lógico de expressão
Gostaria de criar um método que aceite umExpression<Func<T, bool>>
e cria o inverso lógico dele (ou seja, retornariafalse
onde teria retornadotrue
, e vice versa. Isso é muito mais difícil do que eu pensava. Aqui é onde eu estou:
public static Expression<Func<T, bool>> Not<T>(this Expression<Func<T, bool>> expression)
{
return Expression.Lambda<Func<T, bool>>(Expression.Not(expression.Body));
}
Este compila bem, mas lança a seguinte exceção quando chamado:
Test method Tests.Common.Unit.LinqPredicateBuilderTests.CanInverseAPredicate threw exception:
System.ArgumentException: Incorrect number of parameters supplied for lambda declaration
Não faço ideia do que estou fazendo. Alguém poderia preencher os espaços em branco?