AutoMapper将源对象上的单个列表映射到目标对象上的两个列表中

Cod*_*key 2 c# mapping domain-object dto automapper

我正在尝试使用AutoMapper从包含对象列表的Domain对象进行映射,其中我有一个布尔属性,我想使用AutoMapper用来将该列表拆分为目标对象上的两个目标的属性.

我的基本域看起来像这样(来源)

//Domain object
public class Article
{
  public bool IsActive { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

所以我的来源将是IList <Article>

我的观点看起来像这样(目的地)

//DTO
public class ViewAllArticles
{
  public IList<ViewArticle> ActiveArticles { get; set; }
  public ILIst<ViewArticle> InactiveArticles { get; set; }
}

public class ViewArticle
{
  public bool IsActive { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

想要映射

//wanted mapping code (source to destination)
Mapper.Map<IList<Article>, ViewAllArticles>(collectionOfAllArticles)
Run Code Online (Sandbox Code Playgroud)

其中ActiveArticles仅包含具有"IsActive = true"的文章,反之亦然包含InactiveArticles.

希望你们中的一个可以帮助我开始做这种映射,我觉得非常有用.

提前致谢.

And*_*rko 6

你可以这样做

internal class StartNewDemo
{
    public static void Main(string[] args)
    {
        Mapper.CreateMap<IList<Article>, ViewAllArticles>()
            .ForMember(map => map.ActiveArticles, opt => opt.MapFrom(x => x.Where(y => y.IsActive)))
            .ForMember(map => map.InactiveArticles, opt => opt.MapFrom(x => x.Where(y => !y.IsActive)));

        var list = new List<Article>() { new Article { IsActive=true }, new Article { IsActive = false } };
        var result = Mapper.Map<List<Article>, ViewAllArticles>( list );
    }
}
Run Code Online (Sandbox Code Playgroud)