public async Task StartScrapingAsync() { try { var shows = await ProcessTVShows(); foreach (var show in shows) { var castList = await ProcessCastmembers(show.Id); if (castList.Any()) { var exsitingLinkages = await _tvMazeRepository.GetCastShowLinkageAsync(); var linkageList = castList.ToList().Select(cm => new CastShowLinkage() { CastmemberId = cm.Id, TVShowId = show.Id }) .Where(cm => !exsitingLinkages.Any(link => link.CastmemberId == cm.CastmemberId && link.TVShowId == cm.TVShowId)) .GroupBy(cm => new { cm.CastmemberId, cm.TVShowId }).Select(x => x.First()); _tvMazeRepository.AddShow(show); _tvMazeRepository.AddCastmembers(castList); _tvMazeRepository.AddCastShowLinkage(linkageList); _tvMazeRepository.Save(); } } } catch (Exception ex) { _logger.LogError(ex.Message); } }