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);
        }