繁体   English   中英

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

[英]AutoMapper Map single list on source object into two lists on destination object

我正在尝试使用AutoMapper从包含对象列表的域对象映射,该对象具有一个boolean属性,我想使用AutoMapper用来将该列表分成目标对象上两个目标的属性。

我的基本域如下所示(源)

//Domain object
public class Article
{
  public bool IsActive { get; set; }
}

所以我的来源将是一个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; }
}

想要的映射

//wanted mapping code (source to destination)
Mapper.Map<IList<Article>, ViewAllArticles>(collectionOfAllArticles)

其中ActiveArticles仅包含具有“ IsActive = true”的文章,反之亦然,对于InactiveArticles而言。

希望你们中的一个可以帮助我开始进行这种映射,这对我会非常有用。

提前致谢。

你可以这样做

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 );
    }
}
Mapper.CreateMap<IList<Article>, ViewAllArticles>()
  .AfterMap( (arts , artsvm) => 
{
   //var artsvm = new ViewAllArticles();
   artsvm.ActiveArticles = arts.Where(a=> IsActive==true).ToList();
   artsvm.InactiveArticles = arts.Where(a=> IsActive==false).ToList();
}

您也可以执行ConvertUsing,唯一的区别是您将从new ViewAllArticles开始,因为您将负责创建它。 我在此处未执行此操作的唯一原因是,因为我不记得ConvertUsing是否允许多行lambda,但实际上我会尝试使用ConvertUsing看看是否可行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM