private Book UpdateBookCategories(Book oldBook, List <Guid> newCategoryIds, ref bool isSaved) { var oldBookCategories = _bookCategoryService.Where(x => x.BookId == oldBook.Id).ToList(); // create new book - category ids var newIdsAdded = newCategoryIds.Where(id => oldBookCategories.All(bc => bc.CategoryId != id)).ToList(); if (newIdsAdded.Any()) { _bookCategoryService.CreateMany( newIdsAdded.Select(id => new BookCategory { CategoryId = id, BookId = oldBook.Id }), out isSaved ); } // delete old book - category ids var oldIdsRemoved = oldBookCategories.Where(bc => !newCategoryIds.Contains(bc.CategoryId)).ToList(); if (oldIdsRemoved.Any()) { _bookCategoryService.Delete(oldIdsRemoved, out isSaved); } return(oldBook); }