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扩展方法或其他什么方法,让我的生活更轻松?
尝试以下方法。。
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
}
}