2012-05-23 2 views
1

다음 LINQ 쿼리는 다음과 같습니다. 확장 방법의 호출이 제대로 작동 Visual Basic의 2010 년 선택LINQ 확장 메서드 호출을 변환하는 방법 해당 표현 트리로 선택

Dim qAvSalary = qJobData.Select(Function(e) e.AvSalary) 

그러나하고는 그래서 내가 쿼리 (예를 들어, AvSalary) 문자열 변수를 사용하여 원하는 속성의 이름을 지정할 수 없습니다입니다. LINQ 표현식 트리를 사용하면 가능합니다. 검색어를 해당 표현식 트리로 변환하는 방법에 대한 검색과 시도가 성공적이지 못했습니다. 내 마지막 방법은 다음과 같습니다이 문을 실행

' The IQueryable data to query. 
Dim queryableData As IQueryable(Of JobData) = qJobData.AsQueryable() 
Dim pe As ParameterExpression = Expression.Parameter(GetType(JobData), "e") 
Dim sPropertyName = "AvSalary"  ' or some other property depending on the business logic 
Dim propex = Expression.Property(pe, sPropertyName) 

Dim selectCallExpr As MethodCallExpression = Expression.Call(
     GetType(Queryable), 
     "Select", 
     New Type() {queryableData.ElementType}, 
     queryableData.Expression, 
     Expression.Lambda(Of Func(Of JobData, System.Nullable(Of Int32)))(
        propex, 
        New ParameterExpression() {pe})) 

다음과 같은 예외가 발생합니다 :

메시지 = 선택 "에 대 한 통상"System.Linq.Queryable "인도 표준시 MIT 서재 bereitgestellten Typargumenten 싶게"Keine는 메도가 generische " Argumenten kompatibel. 해결 방법은 형식 코드 생성기를 사용하십시오. "

무엇이 잘못 되었습니까?

답변

0

Select에는 두 가지 유형 매개 변수가 있습니다. 이고 유형입니다. 둘 다 지정하십시오.

+0

_AvSalary_ 속성이 _Integer_ 유형이라고 가정 할 때 어디에서 지정해야합니까? –

+0

새로운 유형() {queryableData.ElementType의 typeof (int)를} 내가 노력 – usr

+0

: 새로운 유형() {queryableData.ElementType, GetType을 (정수)}, 여전히 같은 예외 ... –

관련 문제