Laden...

[erledigt] Expression.Call mit Methode String.Contains aufrufen

Erstellt von Siedlerchr vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.060 Views
S
Siedlerchr Themenstarter:in
178 Beiträge seit 2009
vor 11 Jahren
[erledigt] Expression.Call mit Methode String.Contains aufrufen

Hallo zusammen,

ich rufe per Expression.call auf und will dort die Methode string.Contains verwenden.
Mein Problem ist allerdings, wie ich contains die Parameter übergebe.
Das habe ich noch nicht raus bekommen. Ich habe mir die Expression.Call Überladungen auch schon angeschaut, sehe da aber nichts passendes.

Vielleicht hat ja von euch jemand eine Idee. Das wäre sehr hilfreich.

So sieht mein Code bisher aus, ich rufe die Methode ToUpper von string auf.

string constvalue = "TEST";
			Console.WriteLine ("Hello World!");

			List<User> users = new List<User> {  new User { UserLogin = "test", UserName = "ABC"}, 
												  new User{ UserName = "DEFG", UserLogin = "GHI"}};
		
			
			IQueryable<User> queryableData = users.AsQueryable<User>();
			
			ParameterExpression  p = Expression.Parameter(typeof(User),"s");
			ConstantExpression five = Expression.Constant(constvalue);
			
			Expression left = Expression.Property(p,"UserLogin");
			var exprToUpper =	Expression.Call(left,typeof(string).GetMethod("ToUpper", System.Type.EmptyTypes));
			
		   Expression e1 = Expression.Equal(exprToUpper,five);
			
	       MethodCallExpression whereCallExpression = Expression.Call(
                typeof(Queryable),
                "Where",
                new Type[] { queryableData.ElementType },
                queryableData.Expression,
                Expression.Lambda<Func<User, bool>>(e1, new ParameterExpression[] { p}));
		
	
			
			 IQueryable<User> results = queryableData.Provider.CreateQuery<User>(whereCallExpression);
771 Beiträge seit 2009
vor 11 Jahren

Hi,

Expression.Call mit Parametern: Expression.Call-Methode (Expression, MethodInfo, Expression[]) (und es gibt noch einige weitere Überladungen davon)

S
Siedlerchr Themenstarter:in
178 Beiträge seit 2009
vor 11 Jahren

Hi,

die Lösung hatte ich auch schon, nur es hatte nicht bei mir funktioniert.
Ich habe den Fehler jetzt gefunden, es lag an dem

System.Type.EmptyTypes)

bei dem GetMethod. Wenn man das weglässt, dann funktioniert es.