2012-09-17 7 views
7

Expresión lambda para el operador Contains que puedo generar utilizando este código.Expresión Lambda El operador NotContains ¿Existe?

Expresión

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

El código fuente

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

Su trabajo bien para Contains operador. Cómo modificar el código para trabajar con el operador NotContains.

El código fuente

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

NotContains operador no trabaja. Alguien tiene sugerencia?

+6

¿Qué hay de combinar un simple operador 'not' con una llamada a' Contains'? es decir 'Expression.Not (Expression.Call (containsMethod, ...))' – CodesInChaos

+6

Su primer ejemplo es crear una llamada al método 'string.Contains'. No hay un método como 'string.NotContains'. –

+0

@CodesInChaos Vaya, no vi su comentario de inmediato. Publicarlo como respuesta, lo voy a votar :) – dasblinkenlight

Respuesta

16

No existe el método string.NotContains, por lo que la creación de una llamada a un método llamado NotContains no funciona.

Una solución simple es combinar el operador not, con el método Contains. Al igual que normalmente, escribiría !x.Contains(y) y no x.NotContains(y).

Para crear dicha expresión puede usar Expression.Not(callExpression).

+0

CodesInChaos, Expression.Not (callExpression), funciona bien para NotContains. Gracias – sivaL

Cuestiones relacionadas