0


0

Enumerable.GroupByにLinq.Expressionを作成するための支援が必要

私は最終的にEnumerable型の一連のGroupByメソッドを呼び出すExpressionツリーを生成しようとしています。

簡略化した形で、私はこのようなことを試みています:

IEnumerable list = new List{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");
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を呼び出すと、「タイプ 'System.Linq.Enumerable’にメソッド 'GroupBy’は指定された引数と互換性がありません。」という例外がスローされます。

私は同じようなことを `Enumerable.OrderBy`と同じようにうまくやっていますし、困惑しています。

任意の助けは大歓迎です。

1 Answer


1


2番目のタイプとしてラムダを渡す必要はありませんか。 そのようです。

public void Test(){IEnumerable list =新しいリスト{新しいデータ{名前= "A"、年齢= 10}、新しいデータ{名前= "A"、年齢= 12}、新しいデータ{名前= "B"、年齢= 20}、新しいデータ{名前= "C"、年齢= 15}}。

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

var expression = Expression.Call(typeof(Enumerable)、 "GroupBy"、new Type [] {typeof(データ)、typeof(文字列)}、data、λ);

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