2016-12-08 2 views
2

두 표현식을 결합/결합/결합 할 수있는 방법은 무엇입니까?두 표현식 결합/결합

예 : 최종 결과이 동일한 것

Expression<Func<A,object>> first = x => x.B.C; 
Expression<Func<C,object>> second = x => x.D.E; 

: 위의 예에서

Expression<Func<A,object>> result = x => x.B.C.D.E; 

속성 접근은 읽기 쉽도록 클래스 이름을 사용하여 작성되었다.

여기에 설명 된 방법을 사용하면 Combining two expressions into a pipeline 결과는 동일하지만 표현이 다릅니다.

결과가 Invoke의 대신 x.B.C.D.E가되도록 결합 할 수 있습니까?

+3

그렇다면 '표현식 '이 될까요? 그렇지 않으면'first'가'second'에서 사용할 수있는'C'를 실제로 리턴한다는 것을 모릅니다. – juharr

+0

두 결과를 합치려면 msdn : https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b를 참조하십시오. – jdweng

답변

0

당신은 이런 식으로 할 수있는 :

var param = Expression.Parameter(typeof(A)); 
var i1 = Expression.Invoke(first, param); 
var i1Convert = Expression.Convert(i1, typeof(C)); 

var i2 = Expression.Invoke(second, i1Convert); 
var i2Convert = Expression.Convert(i2, typeof(object)); 

var result = Expression.Lambda(i2Convert , param); 

당신이 생각하기 때문에 당신은 C로 변환해야한다는 첫 번째 발현은 다시 C하지 object 제공합니다.