public override IEnumerator <TDocument> GetEnumerator() { var underlyingEnumerator = base.GetEnumerator(); var profiledEnumerator = new ProfiledEnumerator <TDocument>(underlyingEnumerator); profiledEnumerator.EnumerationEnded += ProfiledEnumeratorOnEnumerationEnded; return(profiledEnumerator); }
private void ProfiledEnumeratorOnEnumerationEnded(object sender, ProfiledEnumerator <TDocument> .EnumerationEndedEventArgs enumerationEndedEventArgs) { BsonValue hint = null, orderBy = null; var hasHint = Options != null && Options.TryGetValue("$hint", out hint); var hasOrderBy = Options != null && Options.TryGetValue("$orderby", out orderBy); var commandStringBuilder = new StringBuilder(1024); commandStringBuilder.Append(Collection.Name); commandStringBuilder.Append(".find("); if (Query != null) { commandStringBuilder.Append("query"); } if (Fields != null) { commandStringBuilder.Append(",fields"); } commandStringBuilder.Append(")"); if (hasOrderBy) { commandStringBuilder.Append(".sort(orderBy)"); } if (hasHint) { commandStringBuilder.Append(".hint(hint)"); } if (Skip != 0) { commandStringBuilder.AppendFormat(".skip({0})", Skip); } if (Limit != 0) { commandStringBuilder.AppendFormat(".limit({0})", Limit); } if (Query != null) { commandStringBuilder.AppendFormat("\nquery = {0}", Query.ToBsonDocument()); } if (Fields != null) { commandStringBuilder.AppendFormat("\nfields = {0}", Fields.ToBsonDocument()); } if (hasOrderBy) { commandStringBuilder.AppendFormat("\norderBy = {0}", orderBy.ToBsonDocument()); } if (hasHint) { commandStringBuilder.AppendFormat("\nhint = {0}", hint.ToBsonDocument()); } // TODO: implement other options printout if needed string commandString = commandStringBuilder.ToString(); ProfilerUtils.AddMongoTiming(commandString, (long)enumerationEndedEventArgs.Elapsed.TotalMilliseconds, ExecuteType.Read); }