使用 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))
我想用来自同一个源变量的自动映射器映射两个目的地。它是一个 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))