Linq: Crée l’inverse logique de l’expression

Je voudrais créer une méthode qui accepte une Expression<Func> et en crée l’inverse logique (c.-à-d. Qu’elle renvoie false où elle aurait été true , et inversement. C’est beaucoup plus difficile que je ne le pensais C’est là que je suis en train de:

 public static Expression<Func> Not(this Expression<Func> expression) { return Expression.Lambda<Func>(Expression.Not(expression.Body)); } 

Ceci comstack bien mais lève l’exception suivante lorsqu’elle est appelée:

 Test method Tests.Common.Unit.LinqPredicateBuilderTests.CanInverseAPredicate threw exception: System.ArgumentException: Incorrect number of parameters supplied for lambda declaration 

Je n’ai aucune idée de ce que je fais. Quelqu’un pourrait-il remplir les blancs?

Vous appelez Expression.Lambda pour créer une expression sans aucun paramètre, alors que vous devez transférer le paramètre unique de l’expression source.

Notez que nous essayons de créer une Expression> et non une Expression> .

Essayez ceci à la place:

 return Expression.Lambda>(Expression.Not(expression.Body), expression.Parameters);