【问题标题】:How to map one list to two lists using AutoMapper?如何使用 AutoMapper 将一个列表映射到两个列表?
【发布时间】:2016-07-22 07:05:43
【问题描述】:

如果我有以下课程:

public MainModel
{
    public List<ChildModel> Children {get; set;}
}

public ChildModel
{
    public bool IsDifferent {get; set;}
}

public MainDto
{
    public List<ChildDto> Children {get; set;}
    public List<DifferentChildDto> Different {get; set;}
}

public ChildDto
{ }

public DifferentChildDto
{ }

使用AutoMapper,是否可以根据属性将ChildModel 列表拆分并映射为2 个单独的列表?

最终结果应该是具有IsDifferent 属性集的项目将在Different 列表中,而其余项目在Children 列表中。

映射也应该反向工作,即。将两个 DTO 列表合并到 1 个模型列表中。

【问题讨论】:

  • 关于反向映射:列表被定义为有序集合,那么你期望合并列表的项目顺序如何?
  • @grek40 顺序不重要。

标签: c# automapper


【解决方案1】:
Mapper.CreateMap<MainModel, MainDto>()
    .ForMember(d => d.Children, o => o.MapFrom(s => s.Children.Where(c => !c.IsDifferent)))
    .ForMember(d => d.Different, o => o.MapFrom(s => s.Children.Where(c => c.IsDifferent)));

Mapper.CreateMap<ChildModel, ChildDto>();

Mapper.CreateMap<ChildModel, DifferentChildDto>();

扭转这一点并不容易,您最好将其作为一个单独的问题发布

【讨论】:

  • Enumerable.Concat 怎么不是微不足道的?编辑:好的,也许不同的类型是个问题
  • 因为列表的类型不同(ChildrenDto vs DifferentChildDto)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-19
  • 2012-10-16
  • 2020-02-12
  • 1970-01-01
  • 2013-05-09
相关资源
最近更新 更多