2012-02-22 116 views
12

我有两个类是下面, 映射必须是这样的 ID->标识 名称 - >文本 ImageName - > ImagePath的 页面 - PageUIsAutomapper嵌套子列表

我怎么能做到这一点使用Automapper?

public class Module 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public string ImageName { get; set; } 
     public virtual ICollection<Page> Pages { get; set; } 
    } 

    public class ModuleUI 
    { 

     public int Id { get; set; } 
     public string Text { get; set; } 
     public string ImagePath { get; set; } 
     public List<PageUI> PageUIs{ get; set; } 
    } 
+1

没有AutoMapper你可以写:'新ModuleUI {ID = module.Id, ImagePath = module.ImageName,PageUIs = new List (module.Pages.Cast ())};' – brgerner 2012-02-22 12:48:45

回答

33

您可以使用ForMemberMapFromdocumentation)。
你映射配置可能是:

Mapper.CreateMap<Module, ModuleUI>() 
    .ForMember(s => s.Text, c => c.MapFrom(m => m.Name)) 
    .ForMember(s => s.ImagePath, c => c.MapFrom(m => m.ImageName)) 
    .ForMember(s => s.PageUIs, c => c.MapFrom(m => m.Pages)); 
Mapper.CreateMap<Page, PageUI>(); 

用法:

var dest = Mapper.Map<ModuleUI>(new Module 
            { 
             Name = "sds", 
             Id = 2, 
             ImageName = "sds", 
             Pages = new List<Page> 
                { 
                 new Page(), 
                 new Page() 
                } 
            }); 

结果:

enter image description here

+1

优秀!我从这里得到了解决方案。我的投票+1 – imdadhusen 2015-03-31 13:51:12

+0

是的! AutoMapper威胁空值,也适用于我! – 2016-01-31 19:54:52