Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#数据表递归输出_C#_Recursion_Parent - Fatal编程技术网

c#数据表递归输出

c#数据表递归输出,c#,recursion,parent,C#,Recursion,Parent,我有一个具有以下结构的数据表: id | parentid | name 1 | 0 | Parent 2 | 1 | Child 3 | 2 | child of child 4 | 1 | second child id | parentid | name 1 | 0 |家长 2 | 1 |个孩子 3 | 2 |儿童之子 4 | 1 |第二个孩子 我坚持把这些输出为父子(基本上我尝试使用开放式xml将它们输出为toc)有人能帮我

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

id | parentid | name 1 | 0 | Parent 2 | 1 | Child 3 | 2 | child of child 4 | 1 | second child id | parentid | name 1 | 0 |家长 2 | 1 |个孩子 3 | 2 |儿童之子 4 | 1 |第二个孩子 我坚持把这些输出为父子(基本上我尝试使用开放式xml将它们输出为toc)有人能帮我将它们输出为列表或字典中的父子


谢谢

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

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 hierarchy =
    table.AsEnumerable().ToHierarchy(
        r => r.Field<int>("parentid") == 0,
        (parent, child) => parent.Field<int>("id") == child.Field<int>("parentid"));
var层次结构=
table.AsEnumerable().ToHierarchy(
r=>r.Field(“parentid”)==0,
(父,子)=>parent.Field(“id”)==child.Field(“parentid”);

创建了一个foreach循环,我在其中获取行并添加到列表中…然后为子行创建另一个列表…但我现在不知道如何链接它们您希望得到什么输出?请举个例子……我不认为在数据表上使用递归函数是明智的。只需将正确的信息放入datatable中,将递归函数保存到正确的作业中,就可以了。。。。如何执行此部分:使用parentid将每个子项添加到父项的子项列表。@user813741:使用方法
FindElementById
(提供根列表和您正在搜索的parentid)获取父项。如果您返回了一个DataNode(!=null),那么您可以使用
foundParent.Children.add(newDataNode(id,name)),将一个新的子节点添加到该父节点的Children属性中
var hierarchy =
    table.AsEnumerable().ToHierarchy(
        r => r.Field<int>("parentid") == 0,
        (parent, child) => parent.Field<int>("id") == child.Field<int>("parentid"));