C# 向上移动父/子关系树

C# 向上移动父/子关系树,c#,entity-framework,recursion,parent-child,navigation-properties,C#,Entity Framework,Recursion,Parent Child,Navigation Properties,我有一个文件夹结构,表示为父/子关系树。现在让我们想象一下下面的树: --折叠1 ---子文件夹1-1 ----子文件夹1-1-1 ---子文件夹2 ----子文件夹2-1 --折叠2 现在我显然得到了要使用的导航属性,所以当在子文件夹1-1中时,我得到了一个表示文件夹1的属性ParentFolder 现在我如何在树上遍历以从文件夹名称生成一个连接字符串 例如,从子文件夹1-1-1调用此方法时,我希望字符串为文件夹1.Subfolder1-1.Subfolder1-1-1,从子文件夹2-1调用时

我有一个文件夹结构,表示为父/子关系树。现在让我们想象一下下面的树:

--折叠1

---子文件夹1-1

----子文件夹1-1-1

---子文件夹2

----子文件夹2-1

--折叠2

现在我显然得到了要使用的导航属性,所以当在
子文件夹1-1
中时,我得到了一个表示
文件夹1
的属性
ParentFolder

现在我如何在树上遍历以从文件夹名称生成一个连接字符串

例如,从
子文件夹1-1-1
调用此方法时,我希望字符串为
文件夹1.Subfolder1-1.Subfolder1-1-1
,从
子文件夹2-1
调用时,我希望字符串为
文件夹1.Subfolder2.Subfolder2-1

我曾考虑过递归,但以下方法不起作用:

public string GetCompleteFolderName(string delimiter)
{
    string folderName = null;

    if (FolderParent != null)
    {
        folderName += GetCompleteFolderName(FolderParent) + delimiter;
    }

    return folderName;
}

private string GetCompleteFolderName(Folder folder)
{
    string folderName = null;
    if (folder != null)
    {
        folderName = folder.Name;
    }

    return folderName;
}

我想这应该能奏效

public class Folder
{
    public Folder ParentFolder { get; set; }
    public string Name { get; set; }

    public Folder()
    {
    }
    public string GetFullFolderName(string delimiter = ".")
    {
        var folderName = string.Empty;
        if (ParentFolder != null)
        {
            folderName += ParentFolder.GetFullFolderName(delimiter) + delimiter + Name;
        }
        else
        {
            folderName += Name;
        }
        return folderName;
    }
}

internal class Program
{
    private static void Main(string[] args)
    {
        var f1 = new Folder {Name = "f1"};
        var f2 = new Folder {Name = "f2", ParentFolder = f1};
        var f3 = new Folder {Name = "f3", ParentFolder = f2};

        Console.WriteLine(f3.GetFullFolderName());
    }
}

输出:f1.f2.f3

正是我想要的。祝贺你的第一个声誉,谢谢你!