// Internal Methods (4) 

        /// <summary>
        ///     Adds the tag order.
        /// </summary>
        /// <param name="data">The data.</param>
        /// <returns></returns>
        internal string AddTagOrder(string data)
        {
            try
            {
                string listId;
                string itemId;
                string tagId;

                ParseData(data, out listId, out itemId, out tagId);

                TagOrder tagOrder = _tagOrderRepository.Add(new TagOrder
                {
                    TagId  = new Guid(tagId),
                    ListId = new Guid(listId),
                    ItemId = int.Parse(itemId)
                });
                return
                    (new XElement("TagOrder", new XAttribute("Id", tagOrder.Id), new XAttribute("Order", tagOrder.Order))
                     .ToString());
            }
            catch (APIException)
            {
                throw;
            }
            catch (Exception e)
            {
                throw new APIException((int)Errors.AddTagOrder, e.Message);
            }
        }
        /// <summary>
        ///     Removes the specified tag order.
        /// </summary>
        /// <param name="tagOrder">The tag order.</param>
        public void Remove(TagOrder tagOrder)
        {
            TagOrder order = Find(tagOrder.TagId, tagOrder.ListId, tagOrder.ItemId);

            if (order == null)
            {
                return;
            }

            _queryExecutor.ExecuteEpmLiveNonQuery(
                @"DELETE FROM TagOrders WHERE TagId = @TagId AND ListId = @ListId AND ItemId = @ItemId",
                new Dictionary <string, object>
            {
                { "@TagId", tagOrder.TagId },
                { "@ListId", tagOrder.ListId },
                { "@ItemId", tagOrder.ItemId }
            });
        }
        //�Public�Methods�(3)�

        /// <summary>
        ///     Adds the specified tag order.
        /// </summary>
        /// <param name="tagOrder">The tag order.</param>
        /// <returns></returns>
        public TagOrder Add(TagOrder tagOrder)
        {
            TagOrder order = Find(tagOrder.TagId, tagOrder.ListId, tagOrder.ItemId);

            if (order != null)
            {
                return(order);
            }

            _queryExecutor.ExecuteEpmLiveNonQuery(
                @"INSERT INTO TagOrders (TagId, ListId, ItemId, TagOrder) VALUES (@TagId, @ListId, @ItemId, (SELECT (SELECT COALESCE(MAX(TagOrder), 0) FROM TagOrders WHERE TagId = @TagId) + 1))",
                new Dictionary <string, object>
            {
                { "@TagId", tagOrder.TagId },
                { "@ListId", tagOrder.ListId },
                { "@ItemId", tagOrder.ItemId }
            });

            return(Find(tagOrder.TagId, tagOrder.ListId, tagOrder.ItemId));
        }