次のステートメントに一致する式ツリーを使用して動的クエリを作成しようとしています:
var items = data.Where(i => i.CoverageType == 2).Select(i => i.LimitSelected);
where メソッドを作成して結果を取得できます。ただし、select メソッドを作成できません。
これが私のwhereメソッドです:
var parm = Expression.Parameter(typeof(BaseClassData), "baseCoverage");
var queryData = data.AsQueryable();
var left = Expression.Property(parm, "CoverageType");
var right = Expression.Constant(2m);
var e1 = Expression.Equal(left, right);
var whereMethod = Expression.Call(
typeof(Queryable),
"Where",
new Type[] { queryData.ElementType },
queryData.Expression,
Expression.Lambda<Func<BaseClassData, bool>>(e1, new ParameterExpression[] { parm }));
これは私がselectメソッドに使用しているものです:
var selectParm = Expression.Property(parm, "LimitSelected");
var selectMethod = Expression.Call(
typeof(Enumerable),
"Select",
new Type[]{typeof(BaseClassData), typeof(decimal)},
whereMethod,
Expression.Lambda<Func<BaseClassData, decimal>>(selectParm, new ParameterExpression[]{ parm})
);
コードを実行すると、次のエラーが発生します。
型 'System.Linq.Enumerable' のジェネリック メソッド 'Select' は、指定された型引数および引数と互換性がありません。メソッドが非ジェネリックの場合は、型引数を指定しないでください。
Enumerable を Queryable に変更しようとしたところ、同じエラーが発生しました。