2

对于某些属性,当值为 0 时,我想将值转换为 NULL。

创建地图时,我使用自定义解析器为我处理转换,如下所示:

AutoMapper.Mapper.CreateMap<ContactData, Contact>()
     .ForMember(x => x.ContactTypeId, y => y.ResolveUsing<ContactTypeIdZeroToNullResolver>());

我的解析器看起来像:

using AutoMapper;

namespace MyCompany.MyProduct.Customers.Data.Helpers
{
    public class ContactTypeIdZeroToNullResolver : ValueResolver<ContactData, int?>
    {
        protected override int? ResolveCore(ContactData source)
        {
            if (source.ContactTypeId == 0)
                return null;

            return source.ContactTypeId;
        }
    }
}

这工作得很好!

我的问题是,是否有可能使这个更通用?我尝试用 int 替换 ContactData,但不断抛出错误。

4

1 回答 1

1

像这样的东西怎么样:

AutoMapper.Mapper.CreateMap<int, int?>()
    .ConvertUsing(src => src == 0 ? (int?)null : src);

AutoMapper.Mapper.CreateMap<ContactData, Contact>();

AutoMapper.Mapper.AssertConfigurationIsValid();

(当然假设这ContactTypeId是一个intinContactData和一个int?in Contact

您应该小心这一点,因为它将适用于这些类型的所有映射。

你也可以像这样内联它:

AutoMapper.Mapper.CreateMap<ContactData, Contact>()
    .ForMember(dest => dest.ContactTypeId,
                       opt => opt.MapFrom(src => src.ContactTypeId == 0
                            ? (int?)null
                            : src.ContactTypeId));

这将实现相同的目标,但不会那么通用。

于 2013-04-05T21:27:54.463 回答