我有IQueryable < T>源,我想動態調用IQueryable < T> .Count()。獲取MethodInfo的Count()任意IQueryable上的LINQ擴展方法<T>
所以,我需要在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);
UPDATE: 我這是怎麼弄總和擴展方法:
MethodInfo sum = typeof(Queryable).GetMethod("Sum", BindingFlags.Static | BindingFlags.Public, null, new[] { typeof(IQueryable<decimal>) }, null);
和這個工作,但這筆款項的方法是不通用的。它雖然是靜態的。
好的,謝謝。我會試試看。 – 2012-04-23 08:36:17
我試過了,但它仍然是空的: Type type = expr.Type.GetGenericArguments()[0]; MethodInfo mi = typeof(Queryable).GetMethod(「Count」,BindingFlags.Static | BindingFlags.Public,null,new [] {type},null); 但是,如果我理解正確,最後一個函數應該返回一些我提供的類型作爲第四個參數,對吧? – 2012-04-23 08:45:22
@MilosMijatovic我的初步答案是不*很*已更新 – 2012-04-23 08:50:40