我有 IQueryable<T> 源,我想动态调用 IQueryable<T>.Count()。
所以,我需要在 IQueryable 中声明的 Count 方法的 MethodInfo。
这是来自 msdn 的签名(在 IQueryable<> 中):
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);
但我的 mi 始终为空;
我也试过:
mi = typeof(IQueryable<>).GetMethod("Count", BindingFlags.Static | BindingFlags.Public, null, new[] { expr.Type }, null);
但又为空。
我的最终目标是:
Expression.Call(mi, expr);
更新:这就是我获得 Sum Extension 方法的方式:
MethodInfo sum = typeof(Queryable).GetMethod("Sum", BindingFlags.Static | BindingFlags.Public, null, new[] { typeof(IQueryable<decimal>) }, null);
这行得通,但是这个 Sum 方法不是通用的。它虽然是静态的。