[英]How to traverse parent child data using Linq
我有一個具有以下結構的課程:
public class OilCategory
{
public OilCategory Parent { get; set; } // For representing parent
public string Name { get; set; }
public int Position { get; set; }
public int Id { get; set; }
}
我有Oil類別的列表集合:
OilCategory rootCategory = new OilCategory {Id = 1, Name = "Root", Position = 1, Parent = null};
OilCategory firstLevel1 = new OilCategory {Id = 2, Name = "fl-1", Position = 1, Parent = rootCategory};
OilCategory firstlevel2 = new OilCategory {Id = 3, Name = "fl-2", Position = 2, Parent = rootCategory};
OilCategory secondLeve1 = new OilCategory {Id = 4, Name = "sl-1", Position = 1, Parent = firstLevel1};
OilCategory secondlevel2 = new OilCategory {Id = 5, Name = "sl-2", Position = 2, Parent = firstLevel1};
List<OilCategory> categories=new List<OilCategory>();
;
categories.Add(rootCategory);
categories.Add(firstLevel1);
;categories.Add(firstlevel2);
categories.Add(secondLeve1);
categories.Add(secondlevel2);
從這個集合類別 (有或沒有高級父項的5個類別)中,我如何生成類似以下結構{root / child / child /}的項目:
Id ItemName
1 root
2 root /fl-1
3 root /fl-2
4 root /fl-1/sl-1
5 root /fl-1/sl-1
首先介紹一種生成項目序列及其所有祖先的方法:
public IEnumerable<OilCategory> Ancestors
{
get
{
OilCategory current = this;
while (current != null)
{
yield return current;
current = current.Parent;
}
}
}
然后只需顛倒順序即可獲得自上而下的順序,而不是自下而上的順序,然后將它們結合在一起。
public string ItemName
{
get
{
return string.Join("/",
Ancestors.Reverse().Select(category => category.Name));
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.