protected virtual void SavePostTags(Post post, string[] postTags) { if (post == null) { throw new ArgumentNullException("post"); } //post tags var existingPostTags = post.PostTags.ToList(); var postTagsToRemove = new List <PostTag>(); foreach (var existingPostTag in existingPostTags) { var found = false; foreach (var newPostTag in postTags) { if (existingPostTag.Name.Equals(newPostTag, StringComparison.InvariantCultureIgnoreCase)) { found = true; break; } } if (!found) { postTagsToRemove.Add(existingPostTag); } } foreach (var postTag in postTagsToRemove) { post.PostTags.Remove(postTag); _postService.UpdatePost(post); } foreach (var postTagName in postTags) { PostTag postTag; var postTag2 = _postTagService.GetPostTagByName(postTagName); if (postTag2 == null) { //add new post tag postTag = new PostTag { Name = postTagName }; _postTagService.InsertPostTag(postTag); } else { postTag = postTag2; } if (!post.PostTagExists(postTag.Id)) { post.PostTags.Add(postTag); _postService.UpdatePost(post); } } }