public List <Credit> UpdateCredits(List <Credit> credits, Movie movie) { int movieId = movie.Id; // First update the movie ids so we can correlate them later. credits.ForEach(t => t.MovieId = movieId); // Now find credits to delete, update and insert. var existingCredits = _creditRepo.FindByMovieId(movieId); // Should never have multiple credits with same credit_id, but check to ensure incase TMDB is on fritz var dupeFreeCredits = credits.DistinctBy(m => m.CreditTmdbId).ToList(); dupeFreeCredits.ForEach(c => c.Id = existingCredits.FirstOrDefault(t => t.CreditTmdbId == c.CreditTmdbId)?.Id ?? 0); var insert = dupeFreeCredits.Where(t => t.Id == 0).ToList(); var update = dupeFreeCredits.Where(t => t.Id > 0).ToList(); var delete = existingCredits.Where(t => !dupeFreeCredits.Any(c => c.CreditTmdbId == t.CreditTmdbId)).ToList(); _creditRepo.DeleteMany(delete); _creditRepo.UpdateMany(update); _creditRepo.InsertMany(insert); return(credits); }