簡體   English   中英

Automapper-將兩個不同的集合屬性映射到一個集合屬性

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

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