public async Task <CsvReport> VenuesByXml(IFormFile file) { var xml = XDocument.Parse(await file.ReadAsStringAsync()); var venues = xml.XPathSelectElements("venues/venue"); var resultCollection = new List <Option <Venue, Error> >(); foreach (var venue in venues) { var name = venue.Attribute("name")?.Value; var capacity = Convert.ToInt32(venue.XPathSelectElement("capacity")?.Value); var town = venue.XPathSelectElement("town")?.Value; var entity = new Venue(name, capacity, town); resultCollection.Add(await _venuesService.AddAsync(entity)); } var successfullyAddVenuesNames = resultCollection .Values() .Select(venue => new OnboardingCsvReportModel($"{venue.Name} successfully added!")) .ToList(); var unsuccessfullyAddVenuesErrs = resultCollection .Exceptions() .Select(error => new OnboardingCsvReportModel(string.Join(", ", error.Messages))) .ToList(); var reportName = $"venues-onboarding-{file.Name}-{DateTime.Now.Date}"; return(PrepareReport(successfullyAddVenuesNames, unsuccessfullyAddVenuesErrs, reportName)); }