递归数据表中的子级
本文关键字:数据表 递归 | 更新日期: 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
函数。