public bool Isroot(CompanyStructured.Common.Models.Node n)
        {
            bool result = false;

            result = n.Equals(ctx.Node.Where(r => r.ParentId.Equals(0)).First())
                         ? true : false;

            return(result);
        }
 public CompanyStructured.Common.Models.Node GetRoot()
 {
     CompanyStructuredSample.Repository.Node node    = ctx.Node.Where(r => r.ParentId == null).FirstOrDefault();
     CompanyStructured.Common.Models.Node    comnode = new CompanyStructured.Common.Models.Node
     {
         Id       = node.Id,
         name     = node.Name,
         parentId = node.ParentId
     };
     return(comnode);
 }
        //public NodeByParentName GetNodeWithParentName(int id)
        //{
        //   CompanyStructured.Common.Models.Node n = Getnode(id);
        //    NodeByParentName nodebyparentname = new NodeByParentName
        //    {
        //        Id = n.Id,
        //        Name = n.name,
        //        DirectParentId = n.parentId,
        //        DirectParentName = n.parentId is null? string.Empty : nodes.Where(r => r.Id == n.parentId).Select(nn => nn.name).FirstOrDefault()
        //    };
        //    return nodebyparentname;
        //}
        public CompanyStructured.Common.Models.Node Getnode(int nodeid)
        {
            nodes = new List <Common.Models.Node>();

            CompanyStructuredSample.Repository.Node findednode = ctx.Node.Where(r => r.Id == nodeid).Single();
            CompanyStructured.Common.Models.Node    n          = new CompanyStructured.Common.Models.Node
            {
                Id       = findednode.Id,
                name     = findednode.Name,
                parentId = findednode.ParentId
            };
            if (n.parentId is null)
            {
                return(GetRoot());
            }
            return(n);
        }
 public CompanyStructuredSample.Repository.Node GetParent(int id)
 {
     CompanyStructured.Common.Models.Node n = Getnode(id);
     CompanyStructured.Common.Models.Node parent;
     if (n.parentId is null)
     {
         parent = GetRoot();
     }
     else
     {
         int index = (int)n.parentId;
         parent = Getnode(index);
     }
     CompanyStructuredSample.Repository.Node rparent = new CompanyStructuredSample.Repository.Node
     {
         Id       = parent.Id,
         Name     = parent.name,
         ParentId = parent.parentId
     };
     return(rparent);
 }
        public IEnumerable <CompanyStructured.Common.Models.Node> Get_all_children(CompanyStructured.Common.Models.Node n)
        {
            List <CompanyStructured.Common.Models.Node> nodes = new List <CompanyStructured.Common.Models.Node>();


            IEnumerable <GetDescendantsByParentId_Result> results = ctx.GetDescendantsByParentId(n.Id);

            foreach (GetDescendantsByParentId_Result node in results)
            {
                CompanyStructured.Common.Models.Node nodmodel = new Common.Models.Node
                {
                    Id       = (int)node.Id,
                    name     = node.Name,
                    parentId = node.ParentId
                };
                nodes.Add(nodmodel);
            }
            ;



            //  Parallel.ForEach(ns, node =>
            //{
            //    CompanyStructured.Common.Models.Node nodmodel = new Common.Models.Node
            //    {
            //        Id = node.Id,
            //        name = node.Name,
            //        parentId = node.ParentId
            //    };
            //    nodes.Add(nodmodel);
            //    Thread t = new Thread(() => Get_all_children(nodmodel));
            //    lt.Add(t);
            //});
            //  Parallel.ForEach(lt, tr =>
            //{
            //    tr.Start();
            //});

            return(nodes);
        }
        public int GetHeight(CompanyStructured.Common.Models.Node n)
        {
            return((int)ctx.GetHeightById((int)n.Id).First());


            //int height = 0;
            //CompanyStructuredSample.Repository.Node rnode = new CompanyStructuredSample.Repository.Node
            //{
            //    Id = n.Id,
            //    Name = n.name,
            //    ParentId = n.parentId
            //};

            //using (var ctx = new Entities())
            //{
            //    while (rnode.ParentId != null)
            //    {
            //        Common.Models.Node node = Getnode(n.Id);
            //        rnode = GetParent(rnode.Id);
            //        height++;
            //    }
            //    return height;
            //}
        }