Csharp/C#教程:如何使用Linq构建层次结构来对象?分享


如何使用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

(0)
上一篇 2021年12月23日
下一篇 2021年12月23日

精彩推荐