我需要使用parentChild
对ASP.NET C# + Entity Framework
对象进行一些输入。
目标:将parent
和children
组成的对象返回到ASP.NET View
我的班级(数据库表):
public class Organo
{
[Key]
public int id { get; set; }
public int key { get; set; }
public int parent { get; set; }
public string name { get; set; }
public string text { get; set; }
[NotMapped]
public List<Organo> OrganoChildrens { get; set; }
}
数据示例:
id | key | parent | name | text
----+-------+----------+--------+----------
1 1 0 A A
2 2 1 B B
3 3 1 C C
4 4 2 B1 B1
5 5 4 B1_1 B1_1
6 6 1 D D
我的控制器:
public async Task<ActionResult> index()
{
//get all data
var organos = await db.Organos.ToListAsync();
Organo organo_ = new Organo();
foreach (var item in organos)
{
//head of diagram
if(item.parent == 0)
{
organo_.id = item.id;
organo_.key = item.key;
organo_.parent = 0;
organo_.name = item.name;
organo_.text = item.text;
}
else
{
//child
Organo organoChild_ = new Organo();
organoChild_.id = item.id;
organoChild_.key = item.key;
organoChild_.parent = item.parent;
organoChild_.name = item.name;
organoChild_.text = item.text;
organo_.OrganoChildrens.Add(organoChild_);
}
}
return View(fishbone_);
}
但有了这个,我只能得到第一级孩子。
我如何构建Parent -> Child1 -> Child2 of Child1...
的层次结构?
非常感谢
答案 0 :(得分:0)
尝试这样的事情
public async Task<ActionResult> index()
{
//get all data
var organos = await db.Organos.ToListAsync();
var populatedOrgano = PopulateChildren(organos.Single(x => x.parent == 0));
return View(populatedOrgano);
}
public Organo PopulateChildren(Organo sourceOrgano, ICollection<Organo> organos)
{
Organo organo_ = new Organo();
var children = organos.Where(x => x.parent == sourceOrgano.id);
foreach (var child in children)
{
//child
Organo organoChild_ = new Organo();
organoChild_.id = child.id;
organoChild_.key = child.key;
organoChild_.parent = child.parent;
organoChild_.name = child.name;
organoChild_.text = child.text;
organo_.OrganoChildrens = new List<Organo>();
organo_.OrganoChildrens.Add(organoChild_);
PopulateChildren(child, organos);
}
return organo_;
}