/// <summary>
        /// Delete all records from database
        /// </summary>
        public void Clear()
        {
            var records = BatchRetry.SelectMany(n => n.Value);

            TotalRecords = 0;
            TotalSize    = 0;
            //clear all existing batches
            foreach (var batch in BatchRetry)
            {
                batch.Value.Clear();
            }
        }
 /// <summary>
 /// Get first record in in-cache BacktraceDatabase
 /// </summary>
 /// <returns>First database record</returns>
 private BacktraceDatabaseRecord GetFirstRecord()
 {
     //get all batches (from the beginning)
     for (int i = 0; i < _retryNumber; i++)
     {
         //if batch has any record that is not used
         //set lock to true
         //and return file
         if (BatchRetry.ContainsKey(i) && BatchRetry[i].Any(n => !n.Locked))
         {
             var record = BatchRetry[i].FirstOrDefault(n => !n.Locked);
             if (record == null)
             {
                 return(null);
             }
             record.Locked = true;
             return(record);
         }
     }
     return(null);
 }
 /// <summary>
 /// Get first Backtrace database record by predicate funciton
 /// </summary>
 /// <param name="predicate">Filter function</param>
 /// <returns>Backtrace Database record</returns>
 public BacktraceDatabaseRecord FirstOrDefault(Func <BacktraceDatabaseRecord, bool> predicate)
 {
     return(BatchRetry
            .SelectMany(n => n.Value)
            .FirstOrDefault(predicate));
 }
 /// <summary>
 /// Dispose
 /// </summary>
 public void Dispose()
 {
     TotalRecords = 0;
     BatchRetry.Clear();
 }
 /// <summary>
 /// Get all database records
 /// </summary>
 /// <returns>all existing database records</returns>
 public IEnumerable <BacktraceDatabaseRecord> Get()
 {
     return(BatchRetry.SelectMany(n => n.Value));
 }
 /// <summary>
 /// Check if any record exists
 /// </summary>
 /// <param name="record"></param>
 /// <returns></returns>
 public bool Any(BacktraceDatabaseRecord record)
 {
     return(BatchRetry.SelectMany(n => n.Value).Any(n => n.Id == record.Id));
 }