private List <T> GetRecords <T>(ColumnIndex currentIndex, string[] keys) where T : QuarterlyDatabaseRecord, new() { var compositeKey = new StringBuilder(); foreach (var currentKey in keys) { compositeKey.Append(currentKey); } var matchingRecords = new List <T>(); var offsets = currentIndex.GetOffsets(compositeKey.ToString()); if (offsets != null) { foreach (var currentOffset in offsets) { reader.BaseStream.Position = currentOffset; reader.DiscardBufferedData(); var line = reader.ReadLine(); var newRecord = new T(); newRecord.Populate(line); matchingRecords.Add(newRecord); } } return(matchingRecords); }