簡體   English   中英

如何使用Linq遍歷父子數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM