list<类>树递归

  • Post author:
  • Post category:其他




  1. //找出顶级项
  2. List<PClass> listPParent = listP.FindAll(

  3. delegate

    (PClass pc)
  4. {

  5. if

    (pc.ParentID == 0)

    //顶级项
  6. {

  7. return


    true

    ;
  8. }
  9. {

  10. return


    false

    ;
  11. }
  12. }
  13. );

//找出顶级项 
		List<PClass> listPParent = listP.FindAll(
                    delegate(PClass pc)
                    {
                        if (pc.ParentID == 0)//顶级项
                        {
                            return true;
                        }
                        {
                            return false;
                        }
                    }
                );


  1. if

    (listPParent.Count > 0)
  2. {

  3. foreach

    (PClass itemParent

    in

    listPParent)
  4. {
  5. var result =

    new

    List<PClassView>();
  6. var itemParentView =

    new

    PClassView()
  7. {
  8. ParentID = itemParent.ParentID,
  9. ClassType = itemParent.ClassType,
  10. ID = itemParent.ID
  11. };
  12. recursion(itemParent, result, listP,

    “”

    );

    //找出一个顶级项下的所有子项
  13. list.Add(itemParentView);
  14. list.AddRange(result);
  15. }
  16. }

		if (listPParent.Count > 0)
                {
                    foreach (PClass itemParent in listPParent)
                    {
                        var result = new List<PClassView>();
                        var itemParentView = new PClassView()
                        {
                            ParentID = itemParent.ParentID,
                            ClassType = itemParent.ClassType,
                            ID = itemParent.ID
                        };
                        recursion(itemParent, result, listP, ""); //找出一个顶级项下的所有子项
                        list.Add(itemParentView);
                        list.AddRange(result);
                    }
                }


  1. /// <summary>

  2. /// 递归

  3. /// </summary>

  4. /// <param name=”parentNode”>当前节点</param>

  5. /// <param name=”result”>子节点</param>

  6. /// <param name=”list”>全部节点</param>

  7. /// <param name=”strLevel”>级数标志</param>

  8. private


    void

    recursion(PClass parentNode, IList<PClassView> result, IList<PClass> list,

    string

    strLevel)
  9. {
  10. strLevel = strLevel+

    “-”

    ;

  11. foreach

    (var item

    in

    from c

    in

    list where c.ParentID == parentNode.ID select c)
  12. {
  13. var child =

    new

    PClassView
  14. {
  15. ParentID = item.ParentID,
  16. ClassType = item.ClassType,
  17. ID = item.ID,
  18. Name = item.Name,
  19. NameView=item.NameView
  20. };

  21. if

    (item.ParentID ==

    null

    )
  22. {
  23. result.Add(child);
  24. }

  25. else
  26. {
  27. child.NameView = strLevel + child.NameView;
  28. result.Add(child);
  29. }
  30. recursion(child, result, list, strLevel);
  31. }
  32. }