public Dictionary <string, State> Read(DateTime?onOrAfter = null) { string filename = _dataSetRetriever.GetFilename(); try { var results = new List <CovidRow>(); using var file = new StreamReader(filename); string line = file.ReadLine(); while ((line = file.ReadLine()) != null) { var row = CovidRow.FromCsv(line); if (onOrAfter.HasValue) { bool check = row.Date.Date < onOrAfter.Value.Date; if (check) { continue; } } results.Add(row); } var states = new Dictionary <string, State>(); foreach (var record in results) { bool exists = states.TryGetValue(record.State, out var counties); if (exists) { State state = states[record.State]; bool cExists = state.Counties.Exists(x => x.Fips == record.Fips); if (cExists) { var c = state.Counties.Single(x => x.Fips == record.Fips); c.Records.Add(new CovidDay { Date = record.Date, Cases = record.Cases, Deaths = record.Deaths }); } else { var county = new County { CountyName = record.County, Fips = record.Fips }; county.Records.Add(new CovidDay { Date = record.Date, Cases = record.Cases, Deaths = record.Deaths }); state.Counties.Add(county); } } else { var county = new County { CountyName = record.County, Fips = record.Fips }; county.Records.Add(new CovidDay { Date = record.Date, Cases = record.Cases, Deaths = record.Deaths }); var state = new State { StateName = record.State }; state.Counties.Add(county); states.Add(record.State, state); } } return(states); } finally { try { Console.WriteLine("Deleting file..."); File.Delete(filename); Console.WriteLine("Deleted file."); } catch (Exception e) { Console.WriteLine($"Error deleting file. Message={e.Message}"); } } }