Mam IQueryable < T> źródło i chcę dynamicznie wywoływać IQueryable < T> .Count().Uzyskaj metodę MethodInfo zliczania() LINQ na arbitralnym IQueryable <T>
Potrzebuję metody MethodInfo of Count zadeklarowanej w IQueryable.
to jest jego podpis (w IQueryable <>) z MSDN:
public static int Count<TSource>(
this IQueryable<TSource> source
)
To jak daleko mam:
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);
ale mój mi zawsze jest null;
Próbowałem również:
mi = typeof(IQueryable<>).GetMethod("Count", BindingFlags.Static | BindingFlags.Public, null, new[] { expr.Type }, null);
ale znowu zerowa.
Moim ostatecznym celem byłoby:
Expression.Call(mi, expr);
UPDATE: to jak mam metodę Suma rozszerzenia:
MethodInfo sum = typeof(Queryable).GetMethod("Sum", BindingFlags.Static | BindingFlags.Public, null, new[] { typeof(IQueryable<decimal>) }, null);
i to działa, ale metoda ta suma nie jest nazwą rodzajową. Jest to jednak statyczne.
Dobrze, dzięki. Spróbuję tego. –
Próbowałem go, ale nadal jest pusty: Typ type = expr.Type.GetGenericArguments() [0]; MethodInfo mi = typeof (Queryable) .GetMethod ("Count", BindingFlags.Static | BindingFlags.Public, null, new [] {type}, null); Ale, jeśli dobrze rozumiem, ta ostatnia funkcja powinna zwrócić coś, co dostarczę jako czwarty argument, prawda? –
@MilosMijatovic moja początkowa odpowiedź nie była * całkiem * poprawiła się –