Tengo IQueryable < T> source y quiero llamar dinámicamente a IQueryable < T> .Count().Obtener MethodInfo de Count() Método de extensión LINQ en arbitrario IQueryable <T>
Por lo tanto, necesito MethodInfo del método Count declarado en IQueryable.
este es su firma (en IQueryable <>) de MSDN:
public static int Count<TSource>(
this IQueryable<TSource> source
)
Esto es lo lejos que me dieron:
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);
pero mi mi siempre es nulo;
También probé:
mi = typeof(IQueryable<>).GetMethod("Count", BindingFlags.Static | BindingFlags.Public, null, new[] { expr.Type }, null);
pero de nuevo nula.
Mi objetivo final sería:
Expression.Call(mi, expr);
ACTUALIZACIÓN: esto es cómo consigo método de la suma de Extensión:
MethodInfo sum = typeof(Queryable).GetMethod("Sum", BindingFlags.Static | BindingFlags.Public, null, new[] { typeof(IQueryable<decimal>) }, null);
y esto funciona, pero este método no es Suma genérico. Es aunque estático.
Ok, gracias. Lo intentaré. –
Lo intenté, pero sigue siendo nulo: Tipo type = expr.Type.GetGenericArguments() [0]; MethodInfo mi = typeof (Queryable) .GetMethod ("Count", BindingFlags.Static | BindingFlags.Public, null, new [] {type}, null); Pero, si entiendo correctamente, esta última función debería devolver algo sea cual sea el (los) tipo (s) que proporciono como el cuarto argumento, ¿verdad? –
@MilosMijatovic mi respuesta inicial no fue * bastante * correcta, actualizó –