递归数据表中的子级

本文关键字:数据表 递归 | 更新日期: 2023-09-27 17:58:10

我有下表

PNLParentId  id         operator 
12           13         *
12           14         *
12           15         *
12           1          -
12           2          -
13           21         /
13           20         /

我想获得每个不同运算符的id树
如何更改以下代码?我已经做了好几个小时了,任何帮助都将不胜感激。

var q=  from p in TypedDataTable
      where p.ParentID == null  // well get all parents
     select new 
      {
           ParentID = p.ParentID,
            child =  from c in TypedDataTable 
                      where c.ParentID == p.ID select
                           new  {ChildID=c.ID,
                         ParentID = c.ParentID}
      };

递归数据表中的子级

我更喜欢使用一个类来存储数据(如果您使用LINQ to SQL之类的东西,可能已经自动生成了数据):

class TypedItem
{
   public int ID {get;set;}
   public int ParentID {get;set;}
   public List<TypedItem> Children {get;set;}
   public TypedItem()
   {
       Children = new List<TypedItem>();
   }
}

然后创建一个递归函数来填充数据:

List<TypedItem> GetItems(int? parentId)
{
    var results = from p in TypedDataTable
                  where p.ParentID == parentId
                  select new TypedItem(){
                      ID = p.ID,
                      ParentID = p.ParentID
                  };
    foreach(var result in results)
    {
        result.Children = GetItems(result.ID);
    }
    return results.ToList();
}

你可以从其他代码中调用,比如:

var items = GetItems(null);

注:尚不清楚TypedDataTable是什么,也不清楚它是在哪里定义的。我假设它是全局可用的,如果不是,那么您将希望将它作为参数传递给GetItems函数。