Tôi có IQueryable < T> nguồn và tôi muốn tự động gọi IQueryable < T> .Count().Nhận Phương thức đếm() Phương pháp mở rộng LINQ trên tùy ý IQueryable <T>
Vì vậy, tôi cần MethodInfo of Count được khai báo trong IQueryable.
đây là chữ ký của mình (trong IQueryable <>) từ MSDN:
public static int Count<TSource>(
this IQueryable<TSource> source
)
Đây là cách xa tôi đã nhận:
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);
nhưng mi của tôi luôn luôn là null;
Tôi cũng đã cố gắng:
mi = typeof(IQueryable<>).GetMethod("Count", BindingFlags.Static | BindingFlags.Public, null, new[] { expr.Type }, null);
nhưng một lần nữa null.
mục tiêu cuối cùng của tôi sẽ là:
Expression.Call(mi, expr);
UPDATE: đây là làm thế nào tôi có được phương pháp Sum Extension:
MethodInfo sum = typeof(Queryable).GetMethod("Sum", BindingFlags.Static | BindingFlags.Public, null, new[] { typeof(IQueryable<decimal>) }, null);
và các công trình này, nhưng phương pháp Sum này không chung chung. Đó là mặc dù tĩnh.
Ok, cảm ơn. Tôi sẽ thử nó. –
Tôi đã thử nó nhưng nó vẫn là null: Loại type = expr.Type.GetGenericArguments() [0]; MethodInfo mi = typeof (Truy vấn) .GetMethod ("Đếm", BindingFlags.Static | BindingFlags.Public, null, new [] {type}, null); Nhưng, nếu tôi hiểu chính xác, hàm cuối cùng này sẽ trả về một thứ gì đó mà tôi cung cấp làm đối số thứ 4, đúng không? –
@MilosMijatovic câu trả lời ban đầu của tôi không * khá * đúng đã cập nhật –