Skip to content

Instantly share code, notes, and snippets.

@atheken
Created July 22, 2010 21:03
Show Gist options
  • Save atheken/486591 to your computer and use it in GitHub Desktop.
Save atheken/486591 to your computer and use it in GitHub Desktop.
Using Expression trees to Curry a Lambda
var func = WrapLambda<Outie, Innie, bool>(j => j.BoolVal, "Inner").Compile();
var resultTrue = func(new Outie { Inner = new Innie { BoolVal = true } });
var resultFalse = func(new Outie { Inner = new Innie() });
public class Outie
{
public Innie Inner { get; set; }
}
public class Innie
{
public bool BoolVal { get; set; }
}
public Expression<Func<TOuter, TResult>> WrapLambda<TOuter, TInner, TResult>(Expression<Func<TInner, TResult>> innerExpression, String memberName)
{
var oParam = Expression.Parameter (typeof(TOuter));
var oAccess = Expression.MakeMemberAccess (oParam, typeof(TOuter).GetMember (memberName)[0]);
return Expression.Lambda<Func<TOuter, TResult>> (Expression.Invoke (innerExpression, oAccess), oParam);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment