通过循环实现树状菜单

1、数据结构

 public class Data
    {
        public string ID { get; set; }
        public string Name { get; set; }

        public string ParentId { get; set; }

        public List<Data> ChildData { get; set; }
    }

2、模拟数据

  List<Data> list = new List<Data> { new Data {
                ID="1",
                Name="name1",
                ParentId="0",

            } ,
            new Data {
                ID="2",
                Name="name2",
                ParentId="0",

            } ,
            new Data {
                ID="3",
                Name="name3",
                ParentId="1",

            } ,
            new Data {
                ID="4",
                Name="name4",
                ParentId="1",

            } ,
            new Data {
                ID="5",
                Name="name5",
                ParentId="2",

            } ,
            new Data {
                ID="6",
                Name="name6",
                ParentId="4",

            },    
               new Data {
                ID="7",
                Name="name7",
                ParentId="6",
             }
            };

4、对数据进行排序,目的是先加载父节点。 

   var listData = list.OrderBy(o => o.ParentId).ToList();

5、定义结果集合

  List<Data> resList = new List<Data>();

6、for 循环遍历 或者foreach 遍历排序好的数据,生成树结构菜单

         foreach (var item in listData)
            {
                if (item.ParentId == "0")
                {
                    resList.Add(item);
                }
                else
                {
                    //这个地方是 最难理解得地方,我一直在想如何找他们得父节点,就是想通过一层一层去找,这种想法就是错的,
                    //正确得做法是只要让子节点加载到父节点,就可以了;
                    var parent = listData.Where(x => x.ID == item.ParentId).FirstOrDefault();
                    if (parent.ChildData == null)
                    {
                        parent.ChildData = new List<Data>();W
                    }
                    parent.ChildData.Add(item);
                }
            }

7、序列化成json

  var resJson = Newtonsoft.Json.JsonConvert.SerializeObject(resList);

  

 

posted @ 2020-04-04 17:29  小七要走  阅读(733)  评论(0编辑  收藏  举报