Dynamic 动态调用RavenDB统计方法而不考虑查询源

Dynamic 动态调用RavenDB统计方法而不考虑查询源,dynamic,reflection,ravendb,invoke,out,Dynamic,Reflection,Ravendb,Invoke,Out,RavenDB提供了两个用于查询数据的API,IDocumentQuery用于高级lucene查询,IRavenQueryable用于强类型linq提供程序模型 它们共享一个名为Statistics(out-RavenQueryStatistics)的方法,该方法在运行时返回信息 两种不同的方法签名是: public interface IRavenQueryable<T> .... { IRavenQueryable<T> Statistics(out

RavenDB提供了两个用于查询数据的API,
IDocumentQuery
用于高级lucene查询,
IRavenQueryable
用于强类型linq提供程序模型

它们共享一个名为
Statistics(out-RavenQueryStatistics)
的方法,该方法在运行时返回信息

两种不同的方法签名是:

  public interface IRavenQueryable<T> ....
  {
    IRavenQueryable<T> Statistics(out RavenQueryStatistics stats);

您正在查看接口定义,但事实证明,动态调用最终会调用AbstractDocumentQuery.Statistics,它返回void。
返回实例的方法实际上是作为显式接口方法实现的,因此动态调用无法调用它。

所以这根本不可能?这不是我所希望的,但感谢您亲自回答。
 public interface IDocumentQueryBase<T, out TSelf> 
                          where TSelf : IDocumentQueryBase<T, TSelf>
  {
    TSelf Statistics(out RavenQueryStatistics stats);
    protected override dynamic SetupQuery(IDocumentSession session)
    {
        return session.Advanced.LuceneQuery<Foo>(new FooIndex().IndexName)
               .WhereEquals("Bar", "Baz")
               ;            
    }
using (var session = Store.OpenSession())
{
    RavenQueryStatistics stats=null;
    var dynQuery=    SetupQuery(session);
    var dynQuery2 = dynQuery.Statistics(out stats);
    //Results in cannot cast void to object

    //next i tried using reflection
    var refQuery=    SetupQuery(session);
    MethodInfo methodInfo = refQuery.GetType()
            .GetMethod("Statistics", BindingFlags.Public, null, 
            new[] {typeof (RavenQueryStatistics).MakeByRefType()}, null);


    var refQuery2= methodInfo.Invoke(query, new[] {stats});
    //results in NullReferenceException