如果你可以添加另一个属性类具有子项是这样的:
public class Thing
{
public Thing()
{
Things = new List<Thing>();
}
public int Id { get; set; }
public string Name { get; set; }
public int? ParentId { get; set; }
public List<Thing> Things { get; set; }
}
然后你就可以轻松地集团的项目,以他们的父母是这样的:
var things = new List<Thing>
{
new Thing { Id = 1, Name = "Fire", ParentId = null },
new Thing { Id = 2, Name = "Fire2", ParentId = 1 },
new Thing { Id = 3, Name = "Fire3", ParentId = 2 },
new Thing { Id = 4, Name = "Blast", ParentId = 2},
new Thing { Id = 5, Name = "Water", ParentId = null },
new Thing { Id = 6, Name = "Water2", ParentId = 5 },
new Thing { Id = 7, Name = "Waterx", ParentId = 6 }
};
var groupedThings = new List<Thing>();
foreach (var thing in things)
{
if (thing.ParentId != null)
{
things.First(t => t.Id == thing.ParentId).Things.Add(thing);
}
else
{
groupedThings.Add(thing);
}
}
groupedThings.Dump();

递归是答案 –
这就像5个不同的问题...你想知道如何将其转换为结构树对象?或者你想知道如何从后端获取这个列表并在前端渲染为一棵树?为此,我会说找到一个你喜欢的图书馆并格式化该图书馆的数据。 – thinklarge
对不起,我只是在寻找一种方法来实现以树形格式显示数据的最终结果。我不知道哪个是最好的方法,所以我在同一时间想着5个不同的东西,这让我很头疼哈哈:) – BrunoLM