如何使用AutoMapper将一个列表映射到两个列表

本文关键字:列表 映射 两个 何使用 一个 AutoMapper | 更新日期: 2023-09-27 17:58:20

如果我有以下类:

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列表拆分并映射为两个单独的列表?

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

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

如何使用AutoMapper将一个列表映射到两个列表

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>();

扭转这一局面并非易事,您最好将其作为一个单独的问题发布