将列表<Model>映射到字典<int,视图模型>



我有一个模型类:

public class Model {
    public int Id {get;set;}
    public string Name {get;set;}
}

和视图模型:

public class ViewModel {
    public string Name {get;set;}
}

我想将List映射到Dictionary,其中键将是Model.Id。

我已经开始这样的配置:

configuration
    .CreateMap<Model, KeyValuePair<int, ViewModel>>()
    .ConstructUsing(
        x =>
            new KeyValuePair<int, ViewModel>(x.Id, _mapper.Map<ViewModel>(x)));

但是我不想在配置中使用mapper实例。还有其他方法可以做到这一点吗?我已经看到了一些答案,人们使用x.MapTo(),但这似乎不再可用了…

您可以使用来自lambda参数x.Engine.Mapper的mapper实例

就这么简单

configuration
    .CreateMap<Model, KeyValuePair<int, ViewModel>>()
    .ConstructUsing(context => new KeyValuePair<int, ViewModel>(
        ((Model)context.SourceValue).Id,
        context.Engine.Mapper.Map<ViewModel>(context.SourceValue)));

@hazevich提供的解决方案在5.0更新后停止工作。这是可行的解决方案。


您需要创建类型转换器:

public class ToDictionaryConverter : ITypeConverter<Model, KeyValuePair<int, ViewModel>>
{
    public KeyValuePair<int, ViewModel> Convert(Model source, KeyValuePair<int, ViewModel> destination, ResolutionContext context)
    {
        return new KeyValuePair<int, ViewModel>(source.Id, context.Mapper.Map<ViewModel>(source));
    }
}

,然后在配置中使用:

configuration
    .CreateMap<Model, KeyValuePair<int, ViewModel>>()
    .ConvertUsing<ToDictionaryConverter>();

相关内容

  • 没有找到相关文章

最新更新