2012-09-17 50 views
7

Contains işlecinin kuzu ifadesi Bu kodu kullanarak oluşturabiliyorum.Lambda ifadesi NotContains operatörü Var mı?

İfade

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

Kaynak kod Contains operatör için iyi çalışıyor

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

Onun. NotContains işleci için çalışmak üzere kod nasıl değiştirilir.

Kaynak kod

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

NotContains operatör çalışmıyor. Herhangi bir öneri var mı?

+6

Basit bir 'değil' operatörünün' İçerir 'çağrısıyla birleştirilmesi ne demektir? '' Expression.Not (Expression.Call (içerirMethod, ...)) ' – CodesInChaos

+6

İlk örneğiniz' string.Contains' yöntemine bir çağrı oluşturuyor. String.NotContains' gibi bir yöntem yoktur. –

+0

@CodesInChaos Oops, Yorumunuzu hemen görmedim. Cevap olarak gönderin, bunu yazacağım :) – dasblinkenlight

cevap

16

string.NotContains yöntemi yoktur, bu nedenle NotContains adlı yöntemi çağırmak işe yaramaz.

Basit bir çözüm, not işlecini Contains yöntemiyle birleştirmektir. Sadece normalde !x.Contains(y) yazıp x.NotContains(y) yazabilirsiniz.

Böyle bir ifade oluşturmak için Expression.Not(callExpression)'u kullanabilirsiniz.

+0

CodesInChaos, Expression.Not (callExpression), NotContains için çalıştı. Teşekkürler – sivaL