AutoMapper和条件映射为null

时间:2012-03-21 23:47:21

标签: c# automapper

我想创建这样的映射:

  • 如果source属性的Id == 0,则将destination属性设置为null

  • 如果源属性具有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扩展方法或其他东西,这可以让我的生活更轻松?

1 个答案:

答案 0 :(得分:0)

沿着这些方向尝试一下..

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            
     }
}