// Utility

        #region AddChildren
        private static void AddChildren(
            List <CategoryNode> colNodeItemCollection,
            List <CategoryDTO> colTreeNodeCollection,
            CategoryDTO paramTreeNode)
        {
            // Get the children of the current item
            // This method may be called from the top level
            // or recuresively by one of the child items
            var ChildResults = from objNode in colNodeItemCollection
                               where objNode.ParentId == Convert.ToInt32(paramTreeNode.categoryId)
                               select objNode;

            // Loop thru each Child of the current Node
            foreach (var objChild in ChildResults)
            {
                // Create a new Node
                var objNewNode = new CategoryDTO();

                objNewNode.categoryId = objChild.Id.ToString();
                objNewNode.label      = objChild.NodeName;
                objNewNode.parentId   = Convert.ToInt32(paramTreeNode.categoryId);
                objNewNode.children   = new List <CategoryDTO>();
                objNewNode.selectable = true;

                if (objChild.Selectable == true)
                {
                    objNewNode.expandedIcon  = "fa fa-fw fa fa-folder-open";
                    objNewNode.collapsedIcon = "fa fa-fw fa fa-folder";
                    objNewNode.type          = "ShowCheckBox";
                }

                if (objChild.Selectable == false)
                {
                    objNewNode.expandedIcon  = "fa-th";
                    objNewNode.collapsedIcon = "fa-th";
                    objNewNode.type          = "HideCheckBox";
                }

                // Search for the Node in colTreeNodeCollection
                // By looping through each 'root' Node
                // (meaning the NodeParentData is blank)
                foreach (CategoryNode objNode in colNodeItemCollection
                         .Where(x => x.ParentId == null))
                {
                    // See if Parent is in the colTreeNodeCollection
                    CategoryDTO objParent =
                        colTreeNodeCollection.Where(x => x.categoryId == objNode.Id.ToString()).FirstOrDefault();

                    if (objParent != null) // Parent exists in the colTreeNodeCollection
                    {
                        // Get the Parent Node for the current Child Node
                        CategoryDTO objParentTreeNode = objParent.Descendants()
                                                        .Where(x => x.categoryId == paramTreeNode.categoryId).FirstOrDefault();

                        if (objParentTreeNode != null)
                        {
                            // Add the Child node to the Parent
                            NodeDetailDTO objNewNodeDetail = new NodeDetailDTO();
                            objNewNodeDetail.categoryId       = objChild.Id.ToString();
                            objNewNodeDetail.CheckboxChecked  = false;
                            objNewNodeDetail.selectable       = objChild.Selectable;
                            objNewNodeDetail.requestorVisible = objChild.RequestorVisible;
                            objNewNode.data = objNewNodeDetail;

                            objParentTreeNode.children.Add(objNewNode);
                        }
                    }
                }

                //Recursively call the AddChildren method adding all children
                AddChildren(colNodeItemCollection, colTreeNodeCollection, objNewNode);
            }
        }