private List <RaceDetails> ReadRaces() { var races = new List <RaceDetails>(); var fileInfo = new FileInfo(_excelFile); using (ExcelPackage package = new ExcelPackage(fileInfo)) { var worksheet = package.Workbook.Worksheets.FirstOrDefault(x => x.Name == "Races"); if (worksheet == null) { return(new List <RaceDetails>()); } for (var i = worksheet.Dimension.Start.Row + 1; i <= worksheet.Dimension.End.Row; i++) { var race = new RaceDetails { Name = worksheet.Cells[i, 4].Value?.ToString(), Start = worksheet.Cells[i, 9].Value?.ToString(), Medal = worksheet.Cells[i, 5].Value?.ToString(), Cost = worksheet.Cells[i, 6].Value?.ToString(), Website = worksheet.Cells[i, 11].Value?.ToString(), Dates = FirstNonNull( worksheet.Cells[i, 3].Value?.ToString(), worksheet.Cells[i, 2].Value?.ToString(), worksheet.Cells[i, 1].Value?.ToString() ), }; if (string.IsNullOrEmpty(race.Name) || string.IsNullOrEmpty(race.Start)) { //you get extra dummy lines depending on how they're defined in the spreadsheet continue; } races.Add(race); } } return(races); }
private async Task <(bool ok, decimal?lat, decimal?lng)> GetDetailsFromSummary(RaceDetails summary) { try { var postCode = _urlEncoder.Encode(summary.Start); var text = await _httpClient.GetStringAsync("/maps/api/geocode/json?address=" + postCode); var response = JObject.Parse(text); var results = (JArray)response["results"]; var result = results.FirstOrDefault(); var geo = result?["geometry"]?["location"]; var latVal = geo?["lat"]?.ToString(); var lngVal = geo?["lng"]?.ToString(); decimal?lat = null; decimal?lng = null; if (!string.IsNullOrEmpty(latVal) && decimal.TryParse(latVal, out var value)) { lat = value; } if (!string.IsNullOrEmpty(lngVal) && decimal.TryParse(lngVal, out var value2)) { lng = value2; } return(lat.HasValue && lng.HasValue, lat, lng); } catch (Exception) { return(false, null, null); } }