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);