2016-06-15 103 views
1

我正在努力使用AutoMapper来映射这些对象。 这里是我的DTO:Automapper,将父元素的列表映射到子列表中

public class ContainerDTO 
    { 
     public List<MoneyAccountDTO> MoneyAccounts { get; set; } 

     public List<CardDTO> Cards { get; set; } 
    } 

public class MoneyAccountDTO 
    { 
     public string Iban { get; set; } 
    } 

public class CardDTO 
    { 
     public string MoneyAccountIban { get; set; } 
    } 

这里是BusinessObject的:

public class Container 
    { 
     public List<MoneyAccount> MoneyAccounts { get; set; } 
    } 

public class MoneyAccount 
    { 
     public string Iban { get; set; } 

     public List<Card> Cards { get; set; } 
    } 

public class Card 
    { 
     public string MoneyAccountIban { get; set; } 
    } 

什么,我试图在这里实现,是要找到所有CardDTO在ContainerDTO具有比MoneyAccount同伊班和创建MoneyAccount中的这些卡片的列表。

这里的问题是,我收到与其相关的MoneyAccountDTO相同级别的CardsDTO对象。

我开始用类似的东西:

cfg.CreateMap<ContainerDTO, Container>() 
        .ForMember(dest => dest.MoneyAccounts, opt => opt.MapFrom(src => src.Cards. 
                      Where(c => c.MoneyAccountIban == XXX))); 

但我无法替换那些XXX由货币账户映射器枚举。它认为我不是在正确的方向。

我无法为此映射找到一个好的解决方案。 任何帮助将不胜感激。

回答

0

此问题的解决方案是使用带有where子句的foreach。

cfg.CreateMap<ContainerDTO, Container>().AfterMap((src, dest) => dest.MoneyAccounts 
                   .ForEach(a => a.Cards = src.Cards 
                     .Where(c => c.MoneyAccountIban == a.Iban) 
                         .Select(d => Mapper.Map<CardDTO, ICard>(d)).ToList())); 

它就像一个魅力!

相关问题