public static ICollection <Tag> AsTagCollection(this ICollection <Tag> tags, IList <string> tagNames) { if (tagNames == null) { return(null); } if (tags == null || !tags.Any()) { return(new List <Tag>().AddTags(tagNames)); } var existingTagNames = tags.Select(t => t.Name); var tagNamesToAdd = tagNames?.Where(tagName => !existingTagNames.Contains(tagName)); tags.AddTags(tagNamesToAdd); var tagsToRemove = tags.Where(tag => !tagNames.Contains(tag.Name)); tags = tags.RemoveTags(tagsToRemove); return(tags); }