【问题标题】:Automapper adding mapping with an additional external collectionAutomapper 添加带有额外外部集合的映射
【发布时间】:2019-10-21 23:03:15
【问题描述】:

我有 automapper 正确映射,但我有一个外部集合,我想用它来丰富传出类。

我显然可以将列表购买到配置文件类中,但此列表来自一个 api,我将在运行时运行我的自动映射器之前调用它。下面是一个粗略的示例,希望根据国家名称查看播放器类上的国家代码。

在我的类中实现 Profile 接口的映射

CreateMap<StagePlayer, Player>()
    .ForMember(x => x.Name, x => x.MapFrom(y => y.PlayerName))
    .ForMember(x => x.SomethingA, x => x.MapFrom(y => y.Something))
    .ForMember(x => x.CountryName, x => x.MapFrom(y => y.CountryName )) //obviously don't need this but just for the sake of the example
    //.ForMember(x => x.CountryCode = countries.FirstOrDefault(y => y.CountryName == x.CountryName)?.CountryCode)
    ;

实际使用情况。

var playersOut = playersIn.Select(s => _mapper.Map<Player>(s)).ToList();
playersOut.ForEach(x => x.CountryCode = countries.FirstOrDefault(y => y.CountryName == x.CountryName)?.CountryCode);

我希望在我的个人资料中设置国家/地区代码的 ForEach 设置,但不得不将国家/地区列表传递到映射调用中。

我找不到这方面的任何例子,我确信我遗漏了一些非常明显的东西,但在 automapper 文档中看不到。

【问题讨论】:

    标签: c# .net automapper


    【解决方案1】:

    只要国家变量在映射代码中可用,您就可以这样做

    CreateMap<StagePlayer, Player>()
        .ForMember(x => x.Name, x => x.MapFrom(y => y.PlayerName))
        .ForMember(x => x.SomethingA, x => x.MapFrom(y => y.Something))
        .ForMember(x => x.CountryName, x => x.MapFrom(y => y.CountryName )) //obviously don't need this but just for the sake of the example
        .ForMember(x => x.CountryCode, x => x.MapFrom(y => countries.FirstOrDefault(z => z.CountryName == y.CountryName)?.CountryCode));
    

    【讨论】:

    • 抱歉耽搁了。我同意理想情况下我希望映射中的国家变量,但我不知道如何传递它。我不想通过我的类构造函数传递它,因为它将在运行时填充 public class PlayerMapping : Profile public PlayerMapping() CreateMap.... ...
    • 你可以将国家设置为一些静态集合吗?在我看来,数据不会很快改变。这并不是真正的自动映射器问题,更多的是数据和数据可用性的问题。
    猜你喜欢
    • 2016-01-07
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多