[英]Automapper - mapping two different collection properties to a single collection property
我正在開發用於管理文件和文件夾的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屬性,但是我不知道如何為所有后續子級遞歸地進行該映射。
我又進行了一次嘗試,並提出了以下建議:
CreateMap<Folder, FolderDetail>()
.ForMember(dst => dst.Children, opt => opt.MapFrom(src => GetFolderChildItems(src)));
private IEnumerable<FolderChildItem> GetFolderChildItems(Folder src)
{
var folderChildren = src.SubFolders.Select(folder => new FolderChildItem()
{
Id = folder.Id,
ModifiedDate = folder.ModifiedDate,
Name = folder.Name,
Type = "Folder",
Children = GetFolderChildItems(folder)
}).ToList();
var fileChildren = src.Files.Select(file => new FolderChildItem()
{
Id = file.Id,
ModifiedDate = file.ModifiedDate,
Name = file.Name,
Type = file.Type
}).ToList();
var childItems = folderChildren.Concat(fileChildren);
return childItems;
}
GetFolderChildItems函數將遞歸連接所有子項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.