RavenDB は、データのクエリ用、IDocumentQuery<T>
高度な lucene クエリIRavenQueryable<T>
用、および厳密に型指定された linq プロバイダー モデル用の 2 つの API を提供します。
Statistics(out RavenQueryStatistics stats)
これらは、実行時に情報を返すというメソッドを共有しています。
2 つの異なるメソッド シグネチャは次のとおりです。
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