private IEnumerable <int> GetTagsInLevelRenge(int[] tagIds, int levelRange)
        {
            var tagIdsInRange = new HashSet <int>();

            using (var db = new InnosixEntities())
            {
                var relationTable = db.GetTagHierarchy().ToList();

                foreach (var tagId in tagIds)
                {
                    var nodes = relationTable.Where(x => x.Node.Contains($"/{tagId}/") || (x.TagId == tagId && x.Level > 0));

                    foreach (var node in nodes)
                    {
                        var nodeTagIds = node.Node.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries);

                        var tagIndex = nodeTagIds.IndexOf(tagId.ToString());

                        var indexStart = tagIndex - levelRange;
                        indexStart = indexStart > 0 ? indexStart : 0;

                        var indexEnd = tagIndex + levelRange;
                        indexEnd = indexEnd < nodeTagIds.Length - 1 ? indexEnd : nodeTagIds.Length - 1;

                        for (var i = indexStart; i <= indexEnd; i++)
                        {
                            tagIdsInRange.Add(int.Parse(nodeTagIds[i]));
                        }
                    }
                }
            }
            return(tagIdsInRange);
        }
        private IEnumerable <int> GetParentTags(int[] tagIds)
        {
            var parentTagIds = new HashSet <int>();

            using (var db = new InnosixEntities())
            {
                var relationTable = db.GetTagHierarchy().ToList();
                var parents       = relationTable.Where(x => tagIds.Any(y => y == x.TagId && x.Level > 0)).ToList();
                foreach (var parent in parents)
                {
                    var node     = parent.Node.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
                    var parentId = int.Parse(node[node.Length - 2]);
                    parentTagIds.Add(parentId);
                }
            }
            return(parentTagIds);
        }
        private IEnumerable <int> GetSiblingTags(int[] tagIds)
        {
            var parents = GetParentTags(tagIds);

            var siblingsTagIds = new HashSet <int>();

            using (var db = new InnosixEntities())
            {
                var relationTable = db.GetTagHierarchy().ToList();

                foreach (var parent in parents)
                {
                    var siblings = relationTable.Where(x => x.Node.Contains($"/{parent}/")).ToList();
                    foreach (var sibling in siblings)
                    {
                        var siblingId = GetSiblingIdFromNode(sibling.Node, parent);
                        siblingsTagIds.Add(siblingId);
                    }
                }
            }
            return(siblingsTagIds);
        }