我一直在这个问题上停留了几天,并希望得到一些想法或帮助解决它。 我从LINQ查询对象将平面集合转换为分层集合的递归方法?
public class Hierarchy
{
public Hierarchy(string iD, string name, int level, string parentID, string topParent)
{
ID = iD;
Name = name;
Level = level;
ParentID = parentID;
Children = new HashSet<Hierarchy>();
}
public string ID { get; set; }
public string Name{ get; set; }
public int Level { get; set; }
public string ParentID { get; set; }
public ICollection<Hierarchy> Children { get; set; }
}
的数据的集合,以我的实体是:
ID Name Level ParentID
295152 name1 1 null
12345 child1 2 295152
54321 child2 2 295152
44444 child1a 3 12345
33333 child1b 3 12345
22222 child2a 3 54321
22221 child2b 3 54321
22002 child2c 3 54321
20001 child2a2 4 22222
20101 child2b2 4 22222
这个数据可以扩展到水平的一个未知的深度(我只显示4) 。 最终,我将有一个Hierarchy对象,它具有多个子对象的集合,而这些对象又可能具有多个子对象的集合...等等。 总是只有一个顶级对象。
我想尽可能在这个项目中使用Linq。
这显然需要某种递归方法,但我卡住了。任何想法或帮助将不胜感激。
TIA
有一个需要做这个工作的轻微mod。在PopulateChildren层次的内部调用中需要传递,因为它是这个级别的“根”。那么这一切都很好。 –
这说明了递归和迭代之间对于一些问题的权衡:这个递归解决方案是O(n^2),而迭代解决方案是O(n)。 –