我正在尝试将一个列表映射到另一个列表,但并不是我想要的所有内容都在源对象中。让我解释一下:
这是我的两个对象:
public class SourceItem
{
public int Id { get; set;}
public string Name { get; set;}
}
public class TargetItem
{
public int TargetId { get; set;}
public string TargetName { get; set;}
public int Foo { get; set; }
}
这是我配置Mapper的方式:
public class MyProfile : Profile
{
public MyProfile()
{
CreateMap<SourceItem, TargetItem>()
.ForMember(dest => dest.TargetId, opt => opt.MapFrom(src => src.Id))
.ForMember(dest => dest.TargetName, opt => opt.MapFrom(src => src.Name));
}
}
当我这样做时...
var targets = Mapper.Map<List<SourceItem>, List<TargetItem>>(sourceItems);
... targets
列表的对象会将Foo
设置为0。显然。我想做的是还初始化Foo
(使用参数)。像这样:
fooParameter = 321;
List<TargetItem> targets = Mapper.Map<List<SourceItem>, List<TargetItem>>(sourceItems);
foreach(var target in targets)
{
target.Foo = fooParameter;
}
可以使用Mapper
来做到吗?
谢谢!
答案 0 :(得分:-1)
您不能完全按照自己的意愿进行操作,但是可以通过在调用Map时指定映射选项来达到目标。
fooParameter = 321;
var targets = Mapper.Map<List<SourceItem>, List<TargetItem>>(sourceItems, opt =>
opt.AfterMap(
(src, dest) => {
foreach (var d in dest)
{
d.Foo = fooParameter;
}
})
);