将属性映射到集合项

Rus*_*Cam 17 c# automapper

我一直在筛选AutoMapper文档,试图找到一个推荐的解决方案,但一直无法找到它.

假设我有类似以下的课程

public class Foo
{
    public string Note { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

此类从客户端填充并映射到以下域对象类

public class Bar
{
    public IList<Note> Notes { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

注意的地方

public class Note
{
    public string Text { get; set; }

    // other properties excluded for brevity
}
Run Code Online (Sandbox Code Playgroud)

我想先将Note字符串属性映射FooText新实例上的属性Note,然后将其添加NoteNotes集合中Bar.我正在使用a ValueResolver来执行此操作的第一部分(将字符串映射到新实例Note)但我不确定如何进行第二部分(将该项目映射到集合中的项目).

这样做最干净的方法是什么?

Pat*_*ele 46

我认为这样的事情应该有用(没有经过测试 - 只是大声打字):

Mapper.CreateMap<Foo, Bar>().ForMember(d => d.Notes,
    opt => opt.MapFrom(s => new List<Note> { new Note { Text = s.Note } });
Run Code Online (Sandbox Code Playgroud)

编辑

您还可以使用AutoMappers AfterMap功能.这个lambda将在Automapper完成常规映射后执行:

.AfterMap((s,d) => d.Notes.Add(new Note { Text = s.Note }));
Run Code Online (Sandbox Code Playgroud)

  • MapAfter工作了一个款待,非常感谢指点我正确的方向:) (3认同)