2010-09-24 16 views
9

Biorąc pod uwagę następującejak „nie” wyrażenie lambda dla Entity Framework

Expression<Func<T,bool>> matchExpression; 

Jak mogę utworzyć inny wyraz, który jest „nie” od istniejącego.

Próbowałem

Expression<Func<T, bool>> func3 = (i) => !matchExpression.Invoke(i); 

ale to nie jest obsługiwany przez Entity Framework ...

Pozdrowienia

Odpowiedz

10

Trzeba odtworzyć nową lambda i zanegować ciało oryginału jeden:

Expression<Func<T, bool>> not = Expression.Lambda<Func<T, bool>> (
    Expression.Not (matchExpression.Body), 
    matchExpression.Parameters [0]); 
+0

To jest lepsze; Miałem pierdnięcie mózgu, p –

+1

(mógłbyś po prostu przekazać parametry MatchExpression.Parameters - byłoby tak samo) –

+0

@Marc: Oczywiście. Ale w tym konkretnym przypadku, podoba mi się, że wyraża on zamiar negowania predykatu za pomocą jednego parametru. –