创建一个线性数据表,其中每对连续列的数据代表父子关系

时间:2015-05-11 12:42:11

标签: c#

我在C#中有一个具有以下结构的数据表。

id  name  parentid 
1    a      0
2    b      1
3    c      1
4    d      3
5    e      3
6    f      2
7    g      2         

现在我想创建一个数据表,如下所示

Parent child1 child2 child3 ....
a       b      f
a       b      g
a       c      d
a       c      e

任何建议??

1 个答案:

答案 0 :(得分:1)

  

任何建议?

最后,可能会有一个聪明的Linq查询使用递归函数,但想想如何在逻辑上解决这个并在代码中写出来:

  1. 查找所有“根”项(没有有效父项的项)

    var roots = dt.Where(r => dr["parentid"] == 0);
    
  2. 对于每个根项目,找到将该项目ID作为其父项目的所有项目

    foreach(var root in roots)
        var children = dt.Where(r => dr["parentid"] == root);
    
  3. 为每个孩子找到孩子的项目等等。

  4. 2和3最终可以成为一个简单的3-4行递归函数调用 - 查看递归函数如何工作,我相信你会弄清楚它。如果没有,请在卡住时回复。