c#datatable递归输出

时间:2011-12-13 09:08:44

标签: c# recursion parent

我有一个具有以下结构的数据表:

id | parentid | name
1  | 0        | Parent
2  | 1        | Child
3  | 2        | child of child
4  | 1        | second child

我坚持输出这些作为父子(基本上我试图使用开放的xml输出这些作为toc)有人可以请帮助我将它们作为父子列表或字典中输出...

由于

2 个答案:

答案 0 :(得分:1)

这是我对你的建议。创建一个数据对象(选择一个更好的名称,并在必要时添加更多属性),如下所示

public class DataNode
{
    public int Id { get; private set; }

    public string Name { get; set; }

    public List<DataNode> Children { get; private set; }

    public DataNode(int id, string name)
    {
        Id = id;
        Name = name;
        Children = new List<DataNode>();
    }
}

创建像var dataNodeList = new List<DataNode>();这样的节点的列表,并将没有父节点的所有元素直接添加到该列表中。将每个孩子添加到Children的父级parentid列表中。要在树中查找父级,请使用以下函数:

public DataNode FindElementById(IEnumerable<DataNode> elementsToSearch, int id)
{
    foreach (var dataNode in elementsToSearch)
    {
        if (dataNode.Id == id)
        {
           return dataNode;
        }
        var found = FindElementById(dataNode.Children, id);
        if (found != null)
        {
           return found;
        }
     }
     return null;
 }

答案 1 :(得分:0)

结帐this solution。您可以按如下方式使用它:

var hierarchy =
    table.AsEnumerable().ToHierarchy(
        r => r.Field<int>("parentid") == 0,
        (parent, child) => parent.Field<int>("id") == child.Field<int>("parentid"));