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?