I have a list of data structures:
public List<Personal> Personals() { return new List<Personal> { 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 }, }; }
and I want to build a tree:
public List<Tree> Trees() { return new List<Tree> { new Tree { Id = 0, Name = "Name 0", List = new List<Tree> { new Tree { Id = 1, Name = "Name 1", List = new List<Tree> { new Tree { Id = 4, Name = "Name 4" }, new Tree { Id = 5, Name = "Name 5" } } } } } }; }
How do you create a tree with LinQ for an object? I have to use, but it doesnβt work for sure, see below:
public List<Tree> GetTree(List<Personal> 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; }