2009-10-30 6 views
0

열거 형 유형에 대해 일련의 GroupBy 메소드를 궁극적으로 호출하는 표현식 트리를 생성하려고합니다. 이 같은 간단한 형태에서Enumerable.GroupBy에 Linq.Expression을 작성하는 데 도움이 필요합니다.

내가 시도하고 뭔가 :

IEnumerable<Data> list = new List<Data>{new Data{Name = "A", Age=10}, 
    new Data{Name = "A", Age=12}, 
    new Data{Name = "B", Age=20}, 
    new Data{Name="C", Age=15}}; 

Expression data = Expression.Parameter(typeof(IEnumerable<Data>), "data"); 
Expression arg = Expression.Parameter(typeof(Data), "arg"); 
Expression nameProperty = Expression.PropertyOrField(arg, "Name"); 

Expression group = Expression.Call(typeof(Enumerable), "GroupBy", new Type[] { typeof(Data), typeof(string) }, data, nameProperty); 

호출 끝에 Expression.Call 할 던졌습니다 "어떤 방법 유형에 'GROUPBY' 'System.Linq.Enumerable'는 호환되지 않습니다 주장했다. "

나는 유사한 방법으로 Enumerable.OrderBy과 비슷한 방식으로 성공적으로 수행하고 있으며 문제가 있습니다.

도움을 주시면 감사하겠습니다.

답변

1

두 번째 유형으로 람다를 전달할 필요가 없습니까? 그렇게.

public void Test() 
    { 
     IEnumerable<Data> list = new List<Data> 
     { 
      new Data{Name = "A", Age=10}, 
      new Data{Name = "A", Age=12}, 
      new Data{Name = "B", Age=20}, 
      new Data{Name= "C", Age=15} 
     }; 


     var data = Expression.Parameter(typeof(IEnumerable<Data>), "data"); 
     var arg = Expression.Parameter(typeof(Data), "arg"); 
     var nameProperty = Expression.PropertyOrField(arg, "Name"); 
     var lambda = Expression.Lambda<Func<Data, string>>(nameProperty, arg); 

     var expression = Expression.Call(
      typeof(Enumerable), 
      "GroupBy", 
      new Type[] { typeof(Data), typeof(string) }, 
      data, 
      lambda); 

     //expected = {data.GroupBy(arg => arg.Name)} 
    } 
+0

. 고맙습니다 – dkackman

관련 문제