2010-07-01 2 views
5

Expression<Func<T, T2, bool>> 형식의 표현식이 있습니다.이 표현식은 Expression<Func<T2, bool>> 형식의 표현식으로 변환해야합니다. 식은 일정한 값을가집니다.Expression <Func <T, T2, bool>> to Expression <Func <T2, bool>>을 T에 대한 상수를 도입하여 변환하십시오.

표현식으로 머물러 있어야하므로 첫 번째 매개 변수로 상수로 표현식을 호출 할 수 없습니다.

여기 표현식 트리에 대한 다른 질문을 살펴 보았지만 문제에 대한 해결책을 찾을 수 없습니다. 상수를 도입하고 하나의 매개 변수를 제거하기 위해 표현식 트리를 따라야한다고 생각하지만 지금은 어디에서 시작할 지조차 알지 못합니다. :(

답변

4

당신은 다른를 호출하는 새로운 람다 식 만들 Expression.Invoke를 사용할 수 있습니다. 마치 마법처럼

static Expression<Func<T2, bool>> PartialApply<T, T2>(Expression<Func<T, T2, bool>> expr, T c) 
{ 
    var param = Expression.Parameter(typeof(T2), null); 
    return Expression.Lambda<Func<T2, bool>>(
     Expression.Invoke(expr, Expression.Constant(c), param), 
     param); 
} 
+0

작품을, 전체 표현 세를 걷는 것보다 훨씬 쉽게 해 주셔서 감사합니다. –