C#: How to set parameter of method using reflection

Soldato
Joined
18 Oct 2002
Posts
15,619
Location
The land of milk & beans
The following code is a helper I've created for a system which allows administrators to create their own queries on a database. It returns a lambda expression based on the method and value provided.

I am attempting to find a way to pass parameters to the method call - in this example I am using the `StartsWith` parameter of `String`, and attempting to set `StringComparison.OrdinalIgnoreCase` as a parameter.

Here is the code:

Code:
public static class LambdaExpressionHelper<T> {
    	public static Expression<Func<T, bool>> Build(string propertyName, string method, string propertyValue) {
    		PropertyInfo propertyInfo = typeof(T).GetProperty(propertyName);
    
    		ParameterExpression e = Expression.Parameter(typeof(T), "e");
    		MemberExpression m = Expression.MakeMemberAccess(e, propertyInfo);
    		ConstantExpression c = Expression.Constant(propertyValue, m.Type);
    		MethodInfo mi = m.Type.GetMethod(method, new Type[] { m.Type }, );
    
    		// The below caused errors
    		//object classInstance = Activator.CreateInstance(typeof(T), null);
    		//object[] paramArray = new object[] { StringComparison.OrdinalIgnoreCase };
    		//mi.Invoke(classInstance, paramArray);			
    
    		Expression call = Expression.Call(m, mi, c);
    
    		Expression<Func<T, bool>> lambda = Expression.Lambda<Func<T, bool>>(call, e);
    		return lambda;
    	}
    }

    // External code:
    var lambda = LambdaExpressionHelper<MailingListMember>.Build("EmailAddress", "StartsWith", "JimBoB@");

Thanks for any help.
 
Back
Top Bottom