【问题标题】:AutoMapper Map single list on source object into two lists on destination objectAutoMapper 将源对象上的单个列表映射到目标对象上的两个列表
【发布时间】:2012-07-18 18:09:54
【问题描述】:

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

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

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

所以我的来源将是 IList

我的视图看起来像这样(目的地)

//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”的文章,反之亦然。

希望你们能帮助我开始做这种映射,我会发现它非常有用。

提前致谢。

【问题讨论】:

    标签: c# mapping automapper dto domain-object


    【解决方案1】:

    你可以这样做

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

    【讨论】:

      【解决方案2】:
      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 并查看它是否有效。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-19
        • 2022-11-16
        • 1970-01-01
        • 2012-10-16
        • 1970-01-01
        • 1970-01-01
        • 2019-04-26
        相关资源
        最近更新 更多