2013-07-11 5 views
1

Expression<Func<string, bool>> 두 개의 표현식 트리가 있는데 두 표현식의 OR을 수행하는 단일 표현식을 얻고 싶습니다. 두 표현식에 동일한 문자열 매개 변수를 전달하십시오. 어떤 생각?두 표현식 트리를 결합하는 방법

+0

내가 여기 묻는 것이 무엇인지 잘 모르겠다. – Bostwick

답변

1

Expression.Lambda 표현식에서 결합한 다음 Expression.Or을 사용하여 그 중 하나가 사실인지 확인할 수 있습니다.

Expression<Func<Car, bool>> theCarIsRed = c1 => c1.Color == "Red"; 
Expression<Func<Car, bool>> theCarIsCheap = c2 => c2.Price < 10.0; 
Expression<Func<Car, bool>> theCarIsRedOrCheap = Expression.Lambda<Func<Car, bool>>(
    Expression.Or(theCarIsRed.Body, theCarIsCheap.Body), theCarIsRed.Parameters.Single()); 
var query = carQuery.Where(theCarIsRedOrCheap); 

은 어쩌면 당신은 당신이 할 PredicateBuilder from LINQKit를 사용할 수있는 추가 정보를 원하시면에게 here

+1

'theCarIsCheap'의 본문에 사용 된 매개 변수가 결과 표현식에 더 이상 존재하지 않으므로 작동하지 않습니다. ExpressionVisitor에서 먼 길을 사용해야합니다. –

+0

나는 그것을 조사하고있다. 그러나 링크는 가치가있다. – Dave

3

를 얻을 수 있습니다 : 여기

은 예입니다. 예 :

Expression<Func<string, bool>> e1 = …; 
Expression<Func<string, bool>> e2 = …; 
Expression<Func<string, bool>> combined = e1.Or(e2).Expand(); 
+0

그것은 작동하지만 LinqToEntities 쿼리에서 EF와 함께 사용할 예정이므로 Invoke를 사용할 수 없습니다. – Dave

+0

@Dave 그것은'Expand()'가있는 곳으로,'Invoke'를 처리합니다. – svick

관련 문제