RavenDB 提供 2 个 API 用于查询数据、IDocumentQuery<T>
高级 lucene 查询和IRavenQueryable<T>
强类型 linq 提供程序模型。
它们共享一个称为Statistics(out RavenQueryStatistics stats)
在运行时返回信息的方法。
两种不同的方法签名是:
public interface IRavenQueryable<T> ....
{
IRavenQueryable<T> Statistics(out RavenQueryStatistics stats);
和
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