IQueryable < T> sourceがあり、動的にIQueryableをコールしたい。< T> .Count()。任意のIQueryableのCount()LINQ拡張メソッドのMethodInfoを取得する<T>
私はIQueryableで宣言されたCountメソッドのMethodInfoが必要です。
これは(のIQueryable <中>)その署名であるMSDNから:
public static int Count<TSource>(
this IQueryable<TSource> source
)
これは私が得たどのくらいです:
Expression expr; //this is expression which holds my IQueryable<T>
MethodInfo mi = expr.Type.GetMethod("Count", BindingFlags.Static | BindingFlags.Public, null, new[] { expr.Type }, null);
が、私のマイルは常にnullです。
私も試してみました:
mi = typeof(IQueryable<>).GetMethod("Count", BindingFlags.Static | BindingFlags.Public, null, new[] { expr.Type }, null);
が、再びヌルを。
私の最終目標は次のようになります。
Expression.Call(mi, expr);
UPDATE:
MethodInfo sum = typeof(Queryable).GetMethod("Sum", BindingFlags.Static | BindingFlags.Public, null, new[] { typeof(IQueryable<decimal>) }, null);
と、これは動作しますが、この和の方法は一般的なではありません: これは私が合計拡張メソッドを取得する方法です。それは静的ですが。
ありがとう、ありがとう。私はそれを試してみます。 –
私は試しましたが、まだヌルです: タイプtype = expr.Type.GetGenericArguments()[0]; MethodInfo mi = typeof(クエリ可能).GetMethod( "Count"、BindingFlags.Static | BindingFlags.Public、null、new [] {type}、null); しかし、私が正しく理解していれば、この最後の関数は、私が4番目の引数として提供した型を返すはずですか? –
@MilosMijatovic私の最初の答えは*かなり*正しく更新されていません –