0

Type と Expression (TDeligate なし) を受け取るクラスがあります。Expression が : に基づいていることは知ってExpression<Func<T, bool>>いますが、T. 代わりに、Type. 必要なのは、リストに対して式を実行し、結果のサブリストを返すことです。のようなものlist.Where(Expression)。メソッドは次のとおりです。

public IEnumerable Query(Type type, Expression exp) {
    var list = GetListByType(type);
    return list.Where(exp); // << How do I make this happen?
}

編集#1

次のように、(ウィリアムが提案したように) Expression を LambdaExpression に変換することができました。

var d = Expression.Lambda(exp).Compile();

今私の問題はこれです:d上記はFunc<Category, bool>(どこCategoryにあるT)に評価されます。今、これを実行しようとするとreturn list.Where(d);、コンパイラは次のように言います。

型引数は使用法から推測できません。型引数を明示的に指定してみてください。

問題は、持っていないのでdキャストできないことです。 冒頭で述べたように、私は を持っていません。への キャストも機能しませんでした。Func<T, bool>T
Ttypeof(T)
dFunc<object, bool>

これを解決する方法はありますか?

dに対して実際に実行するにはどうすればよいlistですか?

編集#2(回避策/解決策)

最終的に、問題を解決するためにいくつかの CodeDom を生成することになりました。
誰かがもっときれいな解決策を見つけたら、ぜひ聞いてみたいです。

4

0 に答える 0