Możesz łatwo uzyskać JSONA, jeśli masz opakowanie z zapytaniem;
var qLinq = Query<T>.Where(x => x.name=="jim");
Console.WriteLine(qLinq.ToJson());
Istnieje również metoda Explain() na MongoCursor, więc można to zrobić;
var exp = Collection.FindAs<T>(qLinq).Explain()
Console.WriteLine(exp.ToJson());
Więc jeśli chcesz mieć czas, to tam jest "millis";
var msTaken = exp.First(x => x.Name == "millis").Value.AsInt32;
Jeśli masz numer IQueryable
, spróbuj czegoś takiego;
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()
Dzięki. Większość naszych zapytań pochodzi z obiektów 'IQueryable'. Może lepszym pytaniem jest jak zmienić 'IQueryable' w' IMongoQuery'? – kelloti
Nie jest łatwo przejść w tym kierunku, ale możesz to zrobić - patrz zaktualizowana odpowiedź. Drugie podejście polega na umieszczeniu repozytorium na warstwie Mongo Linq, aby można było bezpośrednio pracować z obiektami zapytań <>, robić swoje rejestrowanie, a następnie zwracać IQueryable zamiast próbować konwertować IQueryable do zapytania <> – cirrus
dzięki za pomoc. Twoje rozwiązanie w rzeczywistości się nie kompiluje. Zobacz moje aktualizacje na temat tego, co faktycznie działa dla mnie (zauważ, że muszę zgrać głęboko w wyrażeniu, aby uzyskać klauzulę "where"). – kelloti