のための選択の方法を使用:、私は次の文に一致するように式ツリーを使用して動的クエリを作成しようとしています動的照会および式ツリー
var items = data.Where(i => i.CoverageType == 2).Select(i => i.LimitSelected);
私はどこのメソッドを作成し、そこから結果を得ることができます。ただし、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})
);
:
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メソッドのために使用していますものです:メソッド私のはここ
がある
をNo generic method 'Select' on type 'System.Linq.Enumerable' is compatible with the supplied type arguments and arguments. No type arguments should be provided if the method is non-generic.
また、EnumerableをQueryableに変更しようとしましたが、同じエラーが発生します。
「選択」と「場所」は** 2つの汎用パラメータを取る静的メソッドを作成しました。 – SLaks
ParameterExpression配列の意味ですか?私は声明がコード化された通りにうまく動作するので尋ねる。 whereメソッドを使用してクエリを作成するだけであれば、すべて正常に動作します。それは、式ツリーにselectメソッドを追加しようとするときです。 – MarkSalow
selectMethodの型配列にtypeof(BaseClassData)を追加しました。 – MarkSalow