我一直在筛选AutoMapper文档,试图找到一个推荐的解决方案,但一直无法找到它。
假设我有一个类似下面的课程
public class Foo
{
public string Note { get; set; }
}
此类从客户端填充并映射到以下域对象类
public class Bar
{
public IList<Note> Notes { get; set; }
}
注意是
public class Note
{
public string Text { get; set; }
// other properties excluded for brevity
}
我想将Note
字符串属性映射到Foo
,首先映射到新Text
实例上的Note
属性,然后添加Note
转到Notes
上的Bar
集合。我正在使用ValueResolver
来执行此操作的第一部分(将字符串映射到Note
的新实例),但我不确定如何处理第二部分(将该项映射到集合中的项目。)
最干净的方法是什么?
答案 0 :(得分:45)
我认为这样的事情应该有用(没有经过测试 - 只是大声打字):
Mapper.CreateMap<Foo, Bar>().ForMember(d => d.Notes,
opt => opt.MapFrom(s => new List<Note> { new Note { Text = s.Note } });
修改强>
您还可以使用AutoMappers AfterMap
功能。这个lambda将在Automapper完成常规映射后执行:
.AfterMap((s,d) => d.Notes.Add(new Note { Text = s.Note }));