使用Automapper的ForEach方法和MapTo方法设置每个项的字段
代码示例:
Mapper.CreateMap()
.ForMember(dest => dest.Status, opt => opt.MapFrom(src => src.IsEnabled ? "Enabled" : "Disabled"));
Mapper.CreateMap()
.ForMember(dest => dest.Items, opt => opt.MapFrom(src => src.Items
.Where(item => item.IsEnabled) // 过滤条件
.ToList())) // 转换为List
.ForAllMembers(opt => opt.Ignore()); // 忽略原有属性映射
Mapper.CreateMap()
.ForMember(dest => dest.Items, opt => opt.MapFrom(src => src.Items
.Where(item => item.IsEnabled) // 过滤条件
.ToList())) // 转换为List
.ForAllOtherMembers(opt => opt.ExplicitMap()); // 显式映射其他属性
var categoryModel = new CategoryModel
{
Id = 1,
Name = "Category",
Items = new List
{
new ItemModel { Id = 1, Name = "Item1", IsEnabled = true },
new ItemModel { Id = 2, Name = "Item2", IsEnabled = false },
new ItemModel { Id = 3, Name = "Item3", IsEnabled = true },
}
};
var categoryViewModel = Mapper.Map(categoryModel);
// categoryViewModel.Items[0].Status == "Enabled"
// categoryViewModel.Items[1].Status == null
// categoryViewModel.Items[2].Status == "Enabled"