3

对于映射中特定类型的每个成员,我想使用我的特定自定义值解析器。

我现在的做法是为每个需要它的成员定义这个自定义值解析器。这是当前代码:

我只想为特定地图指定这个,但是对于我所有的谷歌搜索和搜索,我都找不到解决方案。有任何想法吗?注意:它不是所有映射的全局,仅适用于特定的映射!

这是当前代码:

Mapper.CreateMap<csp_CheckSLAForPeriodByHour_Result, CheckSlaItem>()
    // make doubles into 0 instead of null
    .ForMember(p => p.Avg_ms, opt => opt.ResolveUsing<DoubleValueOrZeroResolver>().FromMember(p => p.avg_ms))
    .ForMember(p => p.Mdn_ms, opt => opt.ResolveUsing<DoubleValueOrZeroResolver>().FromMember(p => p.mdn_ms))
    .ForMember(p => p.Sla_i_wefu, opt => opt.ResolveUsing<DoubleValueOrZeroResolver>().FromMember(p => p.sla_i_wefu))
    .ForMember(p => p.Sla_iw_efu, opt => opt.ResolveUsing<DoubleValueOrZeroResolver>().FromMember(p => p.sla_iw_efu))
    .ForMember(p => p.Std_ms, opt => opt.ResolveUsing<DoubleValueOrZeroResolver>().FromMember(p => p.std_ms))
    // make ints into 0 instead of null
    .ForMember(p => p.Min_ms, opt => opt.ResolveUsing<IntValueOrZeroResolver>().FromMember(p => p.min_ms))
    .ForMember(p => p.Max_ms, opt => opt.ResolveUsing<IntValueOrZeroResolver>().FromMember(p => p.max_ms))
    ; 

我想要一些简单的东西:

Mapper.CreateMap<csp_CheckSLAForPeriodByHour_Result, CheckSlaItem>()
.ForAllMembers().OfType(double?).ResolveUsing<DoubleValueOrZeroResolver>()

将不胜感激任何解决方案!

Brgds 里卡德·罗宾

4

2 回答 2

0

实际上有一种方法在 2 年前可能不是这样。
所以你可以替换这个:

Mapper.CreateMap<csp_CheckSLAForPeriodByHour_Result, CheckSlaItem>()
    // make doubles into 0 instead of null
    .ForMember(p => p.Avg_ms, opt => opt.ResolveUsing<DoubleValueOrZeroResolver>().FromMember(p => p.avg_ms))
    .ForMember(p => p.Mdn_ms, opt => opt.ResolveUsing<DoubleValueOrZeroResolver>().FromMember(p => p.mdn_ms))
    .ForMember(p => p.Sla_i_wefu, opt => opt.ResolveUsing<DoubleValueOrZeroResolver>().FromMember(p => p.sla_i_wefu))
    .ForMember(p => p.Sla_iw_efu, opt => opt.ResolveUsing<DoubleValueOrZeroResolver>().FromMember(p => p.sla_iw_efu))
    .ForMember(p => p.Std_ms, opt => opt.ResolveUsing<DoubleValueOrZeroResolver>().FromMember(p => p.std_ms))
    // make ints into 0 instead of null
    .ForMember(p => p.Min_ms, opt => opt.ResolveUsing<IntValueOrZeroResolver>().FromMember(p => p.min_ms))
    .ForMember(p => p.Max_ms, opt => opt.ResolveUsing<IntValueOrZeroResolver>().FromMember(p => p.max_ms))
    ; 

有了这个:

Mapper.CreateMap<csp_CheckSLAForPeriodByHour_Result, CheckSlaItem>()
    // make doubles into 0 instead of null
    .ForAllMembers(opt => opt.ResolveUsing<DoubleValueOrZeroResolver>()); 

映射到 时,所有成员都csp_CheckSLAForPeriodByHour_Result将使用转换器进行转换。DoubleValueOrZeroResolverCheckSlaItem

于 2015-03-02T19:24:56.327 回答
-1

答案是——你不能这样做!您必须为每个属性编写上述代码。

我的解决方案是删除 AutoMapper 并且不再触摸它。不值得麻烦并且调试起来太困难。

于 2013-03-16T12:57:17.243 回答