AutoMapper和到null的条件映射

本文关键字:条件 映射 null 和到 AutoMapper | 更新日期: 2023-09-27 18:28:30

我想创建这样的映射:

  • 如果源属性的Id==0,则将目标属性设置为空

  • 如果源属性具有它的Id!=0,使用默认配置映射此属性

例如:

Mapper.CreateMap<ItemViewModel, Item>()
    .ForMember(x => x.DestinationArticle, o => o.SetNullIfSourceHasIdZero(x => x.SourceArticle));

DestinationArticle和SourceArticle属性用于实现:

public interface IEntity
{
    long Id { get; set }
}

我目前的解决方案是:

.ForMember(x => x.DestinationArticle, o => o.MapFrom(x => x.SourceArticle != null && x.SourceArticle.Id != 0 ? Mapper.Map<Article>(x.SourceArticle) : null))

这不是很好,也不是通用的。

那么,有没有什么方法可以创建前面提到的SetNullIfSourceHasIdZero扩展方法或其他什么方法,让我的生活更轻松?

AutoMapper和到null的条件映射

尝试以下方法。。

Mapper.CreateMap<ItemViewModel, Item>()
    .ForMember(x => x.DestinationArticle, opt => opt.ResolveUsing<SetNullIfSourceHasIdZero>());
public class SetNullIfSourceHasIdZero : ValueResolver<ItemViewModel, DestinationArticle>
{
     protected override DestinationArticle ResolveCore(ItemViewModel item)
     {
        // logic here            
     }
}