[英]How to use AutoMapper to map destination object with a child object in the source object?
[英]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.