Sie können die Json leicht genug bekommen, wenn Sie einen Query Wrapper haben;
Es gibt auch eine Explain() Methode auf MongoCursor, so dass Sie dies tun könnten;
var exp = Collection.FindAs<T>(qLinq).Explain()
Console.WriteLine(exp.ToJson());
Also wenn Sie die Zeit brauchen, ist "Millis" drin;
var msTaken = exp.First(x => x.Name == "millis").Value.AsInt32;
Wenn Sie eine IQueryable
haben, versuchen Sie so etwas wie dieses;
void Do(MongoCollection col, IQueryable iq)
{
// Json Mongo Query
var imq = (iq as MongoQueryable<Blob>).GetMongoQuery();
Console.WriteLine(imq.ToString());
// you could also just do;
// var cursor = col.FindAs(typeof(Blob), imq);
var cursor = MongoCursor.Create(typeof(Blob), col, imq, ReadPreference.Nearest);
var explainDoc = cursor.Explain();
Console.WriteLine(explainDoc);
}//Do()
Dank. Die meisten unserer Abfragen stammen von 'IQueryable'-Objekten. Vielleicht ist die bessere Frage, wie man aus einem "IQueryable" eine "IMongoQuery" macht? – kelloti
Das ist nicht so einfach in diese Richtung zu gehen, aber Sie können es tun - siehe aktualisierte Antwort. Der andere Ansatz besteht darin, ein Repository über die Mongo Linq-Ebene zu legen, so dass Sie direkt mit Query <> -Objekten arbeiten können, Ihre Protokollierung dann IQueryable zurückgeben und IQueryable nicht in Query <> – cirrus
konvertieren, danke für die Hilfe. Ihre Lösung wird jedoch nicht tatsächlich kompiliert. Sehen Sie meine Updates für das, was tatsächlich für mich funktioniert (beachten Sie, wie ich tief in den Ausdruck einrasten muss, um die "where" -Klausel zu erhalten). – kelloti