使用 Automapper 从一个源将两个变量映射到一个目标

Map two variables in one destination from one source with Automapper

我想用来自同一个源变量的自动映射器映射两个目的地。它是一个 DateTime,应该同时映射到 interview_start 和 interview_end。

这是我当前的代码:

CreateMap<FromModel, ToModel>()
.ForMember(dest =>
     dest.interview_start,
     opt => opt.MapFrom(src => src.created_at))
.ForMember(dest =>
    dest.interview_end,
    opt => opt.MapFrom(src => src.created_at));

我想要的是写在同一个函数中。因为这两个属性共享同一个源变量更容易理解。它们是从同一个 属性 映射而来的,这使得代码更具可读性。

CreateMap<FromModel, ToModel>()
.ForMember(dest =>
     (dest.interview_start, dest.interview_end),
     opt => opt.MapFrom(src => src.created_at))

有谁知道从一个变量映射两个变量的更好方法吗?

如果你真的想做这样的事情(我个人认为第一个例子的可读性没有任何问题),你可以通过扩展方法接近你正在寻找的东西,两个有效地包装两个调用ForMember:

public static class AutomapperExtensions
{
    public static IMappingExpression<TSource, TDestination> ForTwoMembers<TSource, TDestination, TMember>(this IMappingExpression<TSource, TDestination>  mappingExpression, Expression<Func<TDestination, TMember>> destinationMember1, Expression<Func<TDestination, TMember>> destinationMember2, Action<IMemberConfigurationExpression<TSource, TDestination, TMember>> memberOptions)
    {
        return mappingExpression
            .ForMember(destinationMember1, memberOptions)
            .ForMember(destinationMember2, memberOptions);
    }
}

您的代码最终看起来像:

CreateMap<FromModel, ToModel>()
.ForTwoMembers(dest1 => dest1.interview_start, dest2 => dest2.interview_end,
     opt => opt.MapFrom(src => src.created_at))