Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将属性映射到集合项_C#_Automapper - Fatal编程技术网

C# 将属性映射到集合项

C# 将属性映射到集合项,c#,automapper,C#,Automapper,我一直在筛选AutoMapper文档,试图找到一个推荐的解决方案,但一直没有找到 假设我有一门课,如下所示 public class Foo { public string Note { get; set; } } 此类从客户端填充并映射到以下域对象类 public class Bar { public IList<Note> Notes { get; set; } } 我想先将Foo上的Note字符串属性映射到Note的新实例上的Text属性,然后将该Note添

我一直在筛选AutoMapper文档,试图找到一个推荐的解决方案,但一直没有找到

假设我有一门课,如下所示

public class Foo
{
    public string Note { get; set; }
}
此类从客户端填充并映射到以下域对象类

public class Bar
{
    public IList<Note> Notes { get; set; }
}
我想先将
Foo
上的
Note
字符串属性映射到
Note
的新实例上的
Text
属性,然后将该
Note
添加到
Bar
上的
Notes
集合中。我正在使用
ValueResolver
执行此操作的第一部分(将字符串映射到
Note
的新实例),但不确定如何执行第二部分(将该项映射到集合中的项)


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

我在想类似的方法应该可以工作(没有经过测试——只是大声打字):


Bar是从数据源填充的域对象。我认为这将负责映射到一个新的域对象实例,但它将处理域对象从数据源填充并且可能已经包含集合中的项,并且我希望向该集合添加项的情况吗?编辑了我的答案,并提供了使用AfterMap的选项。或者,如果事情变得太棘手,您可以使用自定义类型转换器:MapAfter完成了一次处理,非常感谢您为我指明了正确的方向:)
public class Note
{
    public string Text { get; set; }

    // other properties excluded for brevity
}
Mapper.CreateMap<Foo, Bar>().ForMember(d => d.Notes,
    opt => opt.MapFrom(s => new List<Note> { new Note { Text = s.Note } });
.AfterMap((s,d) => d.Notes.Add(new Note { Text = s.Note }));