public async Task <List <FixtureBasic> > GetFixturesBasicAsync(int competitionId, int season) { try { if (competitionId < 1) { throw new ArgumentException("competitionId must be provided", nameof(competitionId)); } if (season < 1) { throw new ArgumentException("season must be provided", nameof(season)); } using (var conn = await _connectionProvider.GetOpenConnectionAsync()) { var fixtures = await _fixtureRepository.GetFixturesByCompetitionAndSeasonAsync(competitionId, season, conn); var players = await _fixtureRepository.GetFixturePlayersByCompetitionAndSeasonAsync(competitionId, season, conn); var result = new List <FixtureBasic>(); foreach (var fixture in fixtures) { var playersForFixture = players.Where(p => p.FixtureId == fixture.FixtureId); var fixtureModel = fixture.ToModel(playersForFixture); fixtureModel.Substitutions = new List <Substitution>(); foreach (var player in playersForFixture.Where(p => p.ReplacedBy != null)) { fixtureModel.Substitutions.Add(new Substitution { PlayerOut = player.Player.ToModel(), PlayerIn = player.ReplacedBy.ToModel() }); } result.Add(fixtureModel); } return(result); } } catch (Exception ex) { _logger.LogError(ex, "Unable to get fixtures for competition {0} and season {1}", competitionId, season); throw; } }