Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
[erledigt] Expression.Call mit Methode String.Contains aufrufen
Siedlerchr
myCSharp.de - Member



Dabei seit:
Beiträge: 178
Herkunft: NRW

Themenstarter:

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

beantworten | zitieren | melden

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);
Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von Siedlerchr am .
private Nachricht | Beiträge des Benutzers
Cat
myCSharp.de - Member

Avatar #avatar-3070.jpg


Dabei seit:
Beiträge: 771

beantworten | zitieren | melden

Hi,

Expression.Call mit Parametern: Expression.Call-Methode (Expression, MethodInfo, Expression[]) (und es gibt noch einige weitere Überladungen davon)
private Nachricht | Beiträge des Benutzers
Siedlerchr
myCSharp.de - Member



Dabei seit:
Beiträge: 178
Herkunft: NRW

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers