2012-09-17 7 views
7

Lambda Ausdruck für Contains Operator kann ich mit diesem Code generieren.Lambda-Ausdruck NotContains-Operator Existiert?

Expression

Company => Company.Name.Contains("test1") 

Quellcode

var method = typeof(string).GetMethod("Contains", new[] { typeof(string) }); 
var startsWithDishExpr = Expression.Call(argLeft, method, argRight); 

Seine Arbeit für Contains Betreiber in Ordnung. So ändern Sie den Code für den Operator NotContains.

Quellcode

var method = typeof(string).GetMethod("NotContains", new[] { typeof(string) }); 
var startsWithDishExpr = Expression.Call(argLeft, method, argRight); 

NotContains Operator funktioniert nicht. Hat jemand einen Vorschlag?

+6

Was ist mit der Kombination eines einfachen "Nicht" -Operators mit einem Aufruf von 'Enthält'? d. h. 'Expression.Not (Expression.Call (containsMethod, ...))' – CodesInChaos

+6

Ihr erstes Beispiel erstellt einen Aufruf der Methode 'string.Contains'. Es gibt keine solche Methode wie 'string.NotContains'. –

+0

@CodesInChaos Hoppla, ich habe Ihren Kommentar nicht sofort gesehen. Post es als Antwort, ich werde es upvote :) – dasblinkenlight

Antwort

16

Es gibt keine Methode string.NotContains, sodass das Erstellen eines Aufrufs für eine Methode namens NotContains nicht funktioniert. Eine einfache Lösung besteht darin, den Operator not mit der Contains-Methode zu kombinieren. Genau wie normalerweise würden Sie schreiben !x.Contains(y) und nicht x.NotContains(y).

Um einen solchen Ausdruck zu erstellen, können Sie Expression.Not(callExpression) verwenden.

+0

CodesInChaos, Expression.Not (callExpression), großartig, es funktionierte für NotContains. Vielen Dank – sivaL