Skip to content

Instantly share code, notes, and snippets.

@jmcd
Created August 1, 2012 11:30
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jmcd/3225995 to your computer and use it in GitHub Desktop.
Save jmcd/3225995 to your computer and use it in GitHub Desktop.
Runtime generation of a lambda of member-expression
public class LambdaExpressionFactory
{
// With member type
public static Expression<Func<T, TProperty>> Lambda<T, TProperty>(string memberName)
{
var parameterExpression = Expression.Parameter(typeof(T), "x");
var memberExpression = Expression.PropertyOrField(parameterExpression, memberName);
var result = (Expression<Func<T, TProperty>>)Expression.Lambda(memberExpression, parameterExpression);
return result;
}
// Without member type
public static Expression<Func<T, object>> Lambda<T>(string memberName)
{
var parameterExpression = Expression.Parameter(typeof(T), "x");
var memberExpression = Expression.PropertyOrField(parameterExpression, memberName);
var unaryExpression = Expression.Convert(memberExpression, typeof(object));
var result = (Expression<Func<T, object>>)Expression.Lambda(unaryExpression, parameterExpression);
return result;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment