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);
Hi,
Expression.Call mit Parametern: Expression.Call-Methode (Expression, MethodInfo, Expression[]) (und es gibt noch einige weitere Überladungen davon)
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.