1:在实际开发中,我们会经常使用到无限递归的情况,如菜单,父子级等的情况
2:Code
1 using System; 2 using System.Collections.Generic; 3 using ConsoleApp1.Models; 4 using System.Linq; 5 using Newtonsoft.Json; 6 namespace ConsoleApp1 7 { 8 class Program 9 { 10 static void Main(string[] args) 11 { 12 var allData = GetListData(); 13 var parentNode = allData.Where(p => p.PParentId == 0).ToList(); 14 List<PersonModel> tree = new List<PersonModel>(); 15 foreach (var item in parentNode) 16 { 17 PersonModel p1 = new PersonModel { Children = new List<PersonModel> { } }; 18 int _id = item.ID; 19 p1.ID = _id; 20 p1.Pname = item.Pname; 21 p1.Age = item.Age; 22 p1.PParentId = item.PParentId; 23 GetNewNodes(allData, p1); 24 tree.Add(p1); 25 } 26 string jsonTree = JsonConvert.SerializeObject(tree, Formatting.Indented); 27 Console.WriteLine(jsonTree); 28 Console.ReadKey(); 29 } 30 31 static void GetNewNodes(List<PersonModel> all, PersonModel curItem) 32 { 33 var subItems = all.Where(c => c.PParentId == curItem.ID).ToList(); 34 curItem.Children = new List<PersonModel>(); 35 curItem.Children.AddRange(subItems); 36 foreach (var subItem in subItems) 37 { 38 GetNewNodes(all, subItem); 39 } 40 } 41 static List<PersonModel> GetListData() 42 { 43 return new List<PersonModel> { 44 new PersonModel{ID=1001,Age=68,Pname="QQ1",PParentId=0 }, 45 new PersonModel{ID=1002,Age=78,Pname="ww",PParentId=0 }, 46 new PersonModel{ID=1003,Age=67,Pname="dd",PParentId=0 }, 47 new PersonModel{ID=1004,Age=88,Pname="ff",PParentId=0 }, 48 49 new PersonModel{ID=1005,Age=18,Pname="gg",PParentId=1001}, 50 new PersonModel{ID=1006,Age=16,Pname="cc",PParentId=1003}, 51 new PersonModel{ID=1007,Age=17,Pname="aa",PParentId=1006}, 52 new PersonModel{ID=1008,Age=19,Pname="tt",PParentId=1007}, 53 new PersonModel{ID=1009,Age=20,Pname="ii",PParentId=1004}, 54 new PersonModel{ID=1010,Age=22,Pname="ggf",PParentId=1003} 55 }; 56 } 57 } 58 }
3:测试ok截图