2014-01-14 4 views
3
var param = Expression.Parameter(typeof(Employee), "t");  
MemberExpression member = Expression.Property(param, "EmployeeName"); 
var value = Convert.ChangeType(filterProperty.Value, member.Type); 
ConstantExpression constant = Expression.Constant(value); 
var body = Expression.Or(leftExpr, Expression.Equal(member, constant)); 

내가 쉽게 정상 속성에 대한 식을 얻을 수 있지만 내가 인덱서 속성에 대한 식을 얻을 수있는 방법 ?Linq에 표현 인덱서 속성에 대한

Employee 클래스에는 두 개의 인덱서가 있습니다.

class Employee 
    { 
     public string EmployeeName {get;set;} 

     public string this[EmployeeTypes empType] 
     { 
      get 
      { 
      return GetEmployee(empType); 
      } 
     } 

     public string this[int empNum] 
     { 
      get 
      { 
      return GetEmployee(empNum); 
      } 
     } 
    } 

답변

5

속성 이름으로 사용 Item : 유형에 대해 정의되지 않은 경우, 인스턴스 특성 '항목 (INT32)'

var param = Expression.Parameter(typeof(Employee), "t"); 
MemberExpression member = Expression.Property(param, "EmployeeName"); 
var body = Expression.Property(param, "Item", Expression.Constant(10)); 
var lambda = Expression.Lambda<Func<Employee, string>>(body, param); 
var compiled = lambda.Compile(); 

당신에게

Func<Employee, string> compiled = t => t[10]; 
+0

예외로 할 수있는 것을 같은 수 있습니다 'PEWQ.TA.Component.Employee' – PawanS

+2

당신이 우리에게 보여준 것처럼'Employee' 클래스가 보이지 않는다는 것을 의미합니다. 나는 당신의 샘플'Employee' 클래스로 그것을 테스트했고 작동합니다. – MarcinJuraszek

+0

네, 맞습니다. 인덱서에는 선택적 매개 변수 – PawanS