从自引用数据库表中填充递归数据结构

这个问题涉及http://www.matthidinger.com/archive/2009/02/08/asp.net-mvc-recursive-treeview-helper.aspx

假设我有一个看起来像这样的表:

alt text http://sofzh.miximages.com/c%23/image_3.png

我有一个递归数据结构,如下所示:

public class TreeNode { public TreeNode(){} public string NodeId { get; set; } public string ParentId { get; set; } public string Name { get; set; } public IEnumerable Children { get; } } 

如何使用Linq从表中填充此递归数据结构?

注意:出于这个问题的目的,请假设我已经有一个非常有效的表格; 即它完全驻留在内存中,或者使用CTE进行访问。 真的,我只是在寻找Linq查询,以便从Linq到SQL DataContext到递归对象。 我知道它可能涉及一个ForEach和一个递归函数调用; 我只是无法理解它。

提前致谢。

我认为您最好的选择是使用CTE查询SQL中的层次结构。 LINQ2SQL和层次/关系数据不能很好地混合。 请参阅Linq中的分层数据 – 选项和性能 。