我有一个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);
但是再次为 null。
我的最终目标是:
Expression.Call(mi, expr);
更新: 这是我获取 Sum 扩展方法的方式:
MethodInfo sum = typeof(Queryable).GetMethod("Sum", BindingFlags.Static | BindingFlags.Public, null, new[] { typeof(IQueryable<decimal>) }, null);
这个方法可以工作,但是这个Sum方法并不是泛型方法。虽然它是静态的。
typeof(Queryable).GetMethod("Count", BindingFlags.Static | BindingFlags.Public, null, new[] { typeof(IQueryable<>) }, null)
时,我收到了null(使用System.Linq
和System.Reflection
)。我错过了什么吗? - slartidan