0
RavenDB提供了2個用於查詢數據的API,IDocumentQuery<T>
用於高級lucene查詢,IRavenQueryable<T>
用於強類型linq提供程序模型。無論查詢源如何動態調用RavenDB統計方法
它們共享一個名爲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
所以這是根本不可能的? – 2013-02-12 13:39:27
不是我所希望的,但謝謝你親自回答。 – 2013-02-12 14:21:47