1

フォルダー階層には、フォルダーに無制限の深さの親フォルダーを含めることができます。

つまり...フォルダAFolderId= 1 ParentFolderId = Null(トップレベル)

フォルダBFolderId= 2 ParentFolderId = 1(Aの下にネスト)

フォルダーCFolderId= 3 ParentFolderId = 2(Bの下にネスト)

フォルダDフォルダID=4 ParentFolderId = 3(Cの下にネスト)

フォルダB(またはユーザーが選択したフォルダ)のすべての子を取得して、すべての子を削除できるようにしますが、親は残します(もちろん、最上位のフォルダが選択されている場合を除く)。

これはおそらくかなり単純な再帰またはforeachループですが、今朝は苦労しています!私はC#とEFを使用しているので、それを使用するものが最も役立ちます。可能であれば、結果をフラットリストとして表示したいと思います。

理想的には、カスタムFolderオブジェクトのメソッドとして使用して、所有している任意のフォルダーにFolder.Children()などと言うことができるようにします。

フォルダオブジェクト:

  public class Folder
  {
    public int Id { get; set; }

    public string Name { get; set; }
    public string Description { get; set; }

    public int? ParentId { get; set; }
    public virtual Folder Parent { get; set; }

    public virtual ICollection<File> Files { get; set; }
  }

前もって感謝します。

4

1 に答える 1

4

これがあなたが望むことをする再帰的な方法です。このメソッドを、取得する子を取得するフォルダーのIDの引数を指定して呼び出すと、すべての子と子の子などが取得されます。

public List<Folder> GetFolderChildsRecursive(Int32 forlderId)
{
    List<Folder> childsOfFolder = context.Folder.Where(e=>e.ParentId == folderId).ToList();
    foreach(Folder child in childsOfFolder)
    {
        List<Folder> childs = GetFoldersRecursive(child.Id);
        childsOfFolder.AddRange(childs);
    }
    return childOfFolder;
}
于 2013-02-17T18:35:49.523 に答える