如何使用Linq构建层次结构来对象?
我有一个数据结构列表:
public List Personals() { return new List { new Personal { Id = 0, Name = "Name 0" }, new Personal { Id = 1, Name = "Name 1", ParentId = 0 }, new Personal { Id = 2, Name = "Name 2", ParentId = 0 }, new Personal { Id = 3, Name = "Name 3", ParentId = 0 }, new Personal { Id = 4, Name = "Name 4", ParentId = 1 }, new Personal { Id = 5, Name = "Name 5", ParentId = 1 }, new Personal { Id = 6, Name = "Name 6", ParentId = 2 }, new Personal { Id = 7, Name = "Name 7", ParentId = 2 }, new Personal { Id = 8, Name = "Name 8", ParentId = 4 }, new Personal { Id = 9, Name = "Name 9", ParentId = 4 }, }; }
我想建一棵树:
public List Trees() { return new List { new Tree { Id = 0, Name = "Name 0", List = new List { new Tree { Id = 1, Name = "Name 1", List = new List { new Tree { Id = 4, Name = "Name 4" }, new Tree { Id = 5, Name = "Name 5" } } } } } }; }
如何使用LinQ构建一个树来对象? 我必须使用,但它不能正常工作,见下文:
public List GetTree(List list) { var listFormat = list.Select(x => new Tree { Id = x.Id, Name = x.Name, ParentId = x.ParentId }).ToList(); var lookup = listFormat.ToLookup(f => f.ParentId); foreach (var tree in listFormat) { tree.List = lookup[tree.Id].ToList(); } return listFormat; }
你应该使用递归:
public void SomeMethod() { // here you get your `list` var tree = GetTree(list, 0); } public List GetTree(List list, int parent) { return list.Where(x => x.ParentId == parent).Select(x => new Tree { Id = x.Id, Name = x.Name, List = GetTree(list, x.Id) }).ToList(); }
与上面相同,只有此代码检查您的根节点是否具有与其自己的ID匹配的ParentID。
上述就是C#学习教程:如何使用Linq构建层次结构来对象?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
public void SomeMethod() { // here you get your `list` var tree = GetTree(list, 0); } public List GetTree(List list, int parent) { return list.Where(x => x.ParentId == parent).Select(x => new Tree { Id = x.Id, Name = x.Name, List = x.ParentId != x.Id ? GetTree(list, x.Id) : new List() }).ToList(); }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/989089.html