2011-08-01 5 views
2

contains 연산자로 linq 표현식을 동적으로 작성하려고합니다.linq 표현식 생성 (contains 포함)의 잘못된 점

이 주제와 관련된 여러 글을 읽은 후, 나는 나를 수행 할 수 있도록 다음과 같은 코드로 올라와있다 평가처럼 "포함"

internal static Expression<Func<TEntity, bool>> StringContains<TEntity>(string propertyName, string subString) 
{ 
    MethodInfo contains = typeof(JsonLinqParser_Paser).GetMethod("Like"); 
    var param = Expression.Parameter(typeof(TEntity)); 
    var body = Expression.Call(contains, Expression.Property(param, propertyName), Expression.Constant(subString, typeof(string))); 

    var lambda = Expression.Lambda<Func<TEntity, bool>>(body, param); 

    return lambda; 
} 
public static bool Like(string a, string b) 
{ 
    return a.Contains(b); 
} 

을 그리고 이것은과 같이 호출됩니다

var expression = Expression.Lambda<Func<TEntity, bool>>(StringContains<TEntity>("FIPSCO_STR", _myStringValue), param); 
다음과 같이

그러나, 런타임에 오류가 발생합니다 : 유형 의

식 'System.Func`2 [DAL.BestAvailableFIP,이 선택 System.Boolean] 창 유형 를 사용할 수 없습니다'선택 System.Boolean '

"DAL.BestAvailableFIP"는 "TEntity"타입이다

.

이 모든 것이 람다 식에 대한 지식 부족과 관련이 있다고 확신합니다. 아무도 내가 뭘 잘못하고 있다고 말할 수 있습니까?

답변

8

StringContains은 이미 LambdaExpression을 반환합니다.

다른 람다 식으로 넣으면 안됩니다.
포함하는 다른 람다 식을 만들려면 Body을 사용해야합니다.