I ho IQueryable < T> source e voglio chiamare IQueryable < T> .Count().Ottieni MethodInfo of Count() metodo di estensione LINQ su arbitrario IQueryable <T>
Quindi, ho bisogno di MethodInfo del metodo Count dichiarato in IQueryable.
questa è la sua firma (in IQueryable <>) da MSDN:
public static int Count<TSource>(
this IQueryable<TSource> source
)
Questo è quanto ho ottenuto:
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);
ma il mio mi è sempre nullo;
Ho anche provato:
mi = typeof(IQueryable<>).GetMethod("Count", BindingFlags.Static | BindingFlags.Public, null, new[] { expr.Type }, null);
ma ancora nulla.
Il mio obiettivo finale sarebbe:
Expression.Call(mi, expr);
UPDATE: questo è come ottengo metodo Sum Estensione:
MethodInfo sum = typeof(Queryable).GetMethod("Sum", BindingFlags.Static | BindingFlags.Public, null, new[] { typeof(IQueryable<decimal>) }, null);
e questo funziona, ma questo metodo Sum non è generica. È statico.
Ok, grazie. Lo proverò. –
L'ho provato ma è ancora nullo: Tipo type = expr.Type.GetGenericArguments() [0]; MethodInfo mi = typeof (Queryable) .GetMethod ("Count", BindingFlags.Static | BindingFlags.Public, null, new [] {type}, null); Ma, se ho capito bene, questa ultima funzione dovrebbe restituire qualcosa qualunque tipo (s) fornisco come quarto argomento, giusto? –
@MilosMijatovic la mia risposta iniziale non era * abbastanza * giusto aggiornato –