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?