我正在努力使用AutoMapper来映射这些对象。 这是我的DTO:
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; }
}
我在这里尝试实现的是找到ContainerDTO中与MoneyAccount具有相同Iban的所有CardDTO,并在MoneyAccount中创建这些卡的列表。
这里的问题是我收到与其相关的MoneyAccountDTO级别相同的CardsDTO对象。
我从那样开始:
cfg.CreateMap<ContainerDTO, Container>()
.ForMember(dest => dest.MoneyAccounts, opt => opt.MapFrom(src => src.Cards.
Where(c => c.MoneyAccountIban == XXX)));
但是我无法用映射器枚举的Money帐户替换那些XXX。它认为我没有朝着正确的方向发展。
我无法为此映射找到一个好的解决方案。 任何帮助将不胜感激。
答案 0 :(得分: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()));
它就像一个魅力!