Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.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
如何组织具有多个parentID级别的c#列表_C# - Fatal编程技术网

如何组织具有多个parentID级别的c#列表

如何组织具有多个parentID级别的c#列表,c#,C#,我有一个c#列表,没有parentID的级别限制。 如何组织列表,以便输出如下所示: root1 ----sub1 --------sub3 ------------sub4 root2 ----sub2 我的名单: var categories = new List<categoryModel>(); categories.Add(new categoryModel { ID = 1, Name = "root 1", ParentID = 0 }); categories.Add

我有一个c#列表,没有parentID的级别限制。 如何组织列表,以便输出如下所示:

root1
----sub1
--------sub3
------------sub4
root2
----sub2

我的名单:

var categories = new List<categoryModel>();
categories.Add(new categoryModel { ID = 1, Name = "root 1", ParentID = 0 });
categories.Add(new categoryModel { ID = 2, Name = "root 2", ParentID = 0 });
categories.Add(new categoryModel { ID = 3, Name = "sub 1", ParentID = 1 });
categories.Add(new categoryModel { ID = 4, Name = "sub 2", ParentID = 2 });
categories.Add(new categoryModel { ID = 5, Name = "sub 4", ParentID = 6 });
categories.Add(new categoryModel { ID = 6, Name = "sub 3", ParentID = 3 });

public class categoryModel
{
    public int ID { get; set; }
    public string Name { get; set; }
    public int ParentID { get; set; }
}
var categories=新列表();
添加(新的categoryModel{ID=1,Name=“root 1”,ParentID=0});
添加(新的categoryModel{ID=2,Name=“root 2”,ParentID=0});
添加(新的categoryModel{ID=3,Name=“sub 1”,ParentID=1});
添加(新的categoryModel{ID=4,Name=“sub2”,ParentID=2});
添加(新的categoryModel{ID=5,Name=“sub 4”,ParentID=6});
添加(新的categoryModel{ID=6,Name=“sub 3”,ParentID=3});
公共类类别模型
{
公共int ID{get;set;}
公共字符串名称{get;set;}
public int ParentID{get;set;}
}

正如评论中所建议的,树形结构是您要寻找的

public class Node{
    public string Value;
    public List<Node> Descendants;

    public Node(string value) { Value = value; }
    public void Add(Node n) { Descendants.Add(n); }
}

var root = new Node("root");
var n1 = new Node("sub")
root.Add(n1);
公共类节点{
公共字符串值;
公开名单;
公共节点(字符串值){value=value;}
public void Add(节点n){子体.Add(n);}
}
var root=新节点(“根”);
var n1=新节点(“子节点”)
根。添加(n1);

您可以有一个通用树来声明
节点

它们是正确的,您应该采用树结构。要使您的结构适合于树结构,只需对您的模型进行一些修复

public class Category
{
   public Category()
  {
    SubCategories = new HashSet<Category>();
  }

    public int ID { get; set; }
    public string Name { get; set; }
    public int? ParentID { get; set; }
    [Foreignkey ("ParentId")]
    public Category Parent {get; set;}
    public ICollection<Category> SubCategories { get; set; }
}

公共类类别
{
公共类别()
{
子类别=新HashSet();
}
公共int ID{get;set;}
公共字符串名称{get;set;}
public int?ParentID{get;set;}
[Foreignkey(“ParentId”)]
公共类别父项{get;set;}
公共ICollection子类别{get;set;}
}

然后,您可以开始查询parentid为null的位置,然后导航到子类别。

使用树结构,您可以在此处找到有关树结构的更多信息:像这样基于约定的数据结构很少是个好主意。除了列表之外,还有其他数据结构可以更好地完成您正在尝试的任务。在没有看到你正在做什么的情况下,我不能推荐一个,但正如帕维尔所提到的,它看起来像是某种类型的树的工作。