public QueryMetadata Aggregate()
        {
            Metadata = new QueryMetadata();

            AggregateConnectionStart();
            AggregateConnectionClosed();
            AggregateCommandErrors();
            AggregateCommandDurations();
            AggregateCommandExecuted();
            AggregateCommandRowCounts();
            AggregateTransactionBegan();
            AggregateTransactionEnd();

            return Metadata;
        }
        public static SqlStatistics Caluculate(QueryMetadata queryMetadata)
        {
            var queryCount = queryMetadata.Commands.Count;
            var connectionCount = queryMetadata.Connections.Count;
            var transactionCount = queryMetadata.Transactions.Count;

            var queryExecutionTime = new TimeSpan();
            var connectionOpenTime = new TimeSpan();

            queryExecutionTime = queryMetadata.Commands.Aggregate(queryExecutionTime, (totalDuration, command) => totalDuration + command.Value.Duration);
            connectionOpenTime = queryMetadata.Connections.Aggregate(connectionOpenTime, (totalDuration, connection) => totalDuration + connection.Value.Duration.GetValueOrDefault(TimeSpan.Zero));

            return new SqlStatistics(
                queryCount,
                connectionCount,
                transactionCount,
                queryExecutionTime,
                connectionOpenTime);
        }