我正在开发用于管理文件和文件夹的Web应用程序。我将文件和文件夹保存在单独的数据库表中,但是当我从后端检索文件夹时,它可以包含子项,可以是文件夹或文件。因此,我不想使用前端中的文件和文件夹的单独列表,而希望使用DTO类将它们组合为单个Children属性,该类具有文件和文件夹都共有的属性。然后我可以显示单个列表。
这是我将项目映射到该属性的一个示例:
CreateMap<Folder, FolderDetail>()
.ForMember(dst => dst.Children, opt => opt.MapFrom(src => src.SubFolders.Select(folder => new FolderChildItem()
{
Id = folder.Id,
ModifiedDate = folder.ModifiedDate,
Name = folder.Name,
Type = "Folder"
}).Concat(src.Files.Select(file => new FolderChildItem()
{
Id = file.Id,
ModifiedDate = file.ModifiedDate,
Name = file.Name,
Type = file.Type
}))));
这实际上可以正常工作,但是问题是我想在树上递归地映射每个子文件夹的孩子,直到找不到更多的子文件夹。然后,我可以包含有关后端返回的主文件夹下的整个树的信息,并可以显示有关包含在主文件夹下的所有文件和文件夹的信息。
这需要将子项添加到FolderChildItem DTO。该示例中的Children项位于FolderDetail DTO上,该目录在顶级返回,Children项本身是FolderChildItem的集合,可以具有自己的子项。我已经在FolderChildItem类中添加了Children属性,但是我不知道如何让所有后续子对象都以递归方式进行映射。
答案 0 :(得分:0)
我又跑了一圈,想出了这个:
stackBlitz
GetFolderChildItems函数将递归连接所有子项。