Null / MinValue检查Automapper配置

时间:2011-10-14 17:39:57

标签: asp.net-mvc-3 automapper

我正在提取一份离开加入约会的客户名单。由于所有客户可能没有约会,基于this answer,我有以下Automapper配置:

Mapper.CreateMap<Event, EventDetailsViewModel>()
               .ForMember(dest => dest.StartDateTime, opt => opt.MapFrom(
                       src => src.StartDateTime == DateTime.MinValue ? "" : DateTimeHelper.ConvertFromUtc(src.StartDateTime, src.TimeZoneId)
                           .ToString("MM/dd/yyyy hh:mm tt", System.Globalization.CultureInfo.InvariantCulture)))
               .ForMember(dest => dest.EndDateTime, opt => opt.MapFrom(
                       src => src.StartDateTime == DateTime.MinValue ? "" : DateTimeHelper.ConvertFromUtc(src.EndDateTime, src.TimeZoneId)
                           .ToString("MM/dd/yyyy hh:mm tt", System.Globalization.CultureInfo.InvariantCulture)))
               .IgnoreAllNonExisting();

DateTimeHelper很简单:

    public static class DateTimeHelper
    {
        public static DateTime ConvertToUtc(DateTime thisDate, string timeZoneId)
        {
            return TimeZoneInfo.ConvertTimeToUtc(thisDate, TimeZoneInfo.FindSystemTimeZoneById(timeZoneId));
        }

        public static DateTime ConvertFromUtc(DateTime thisDate, string timeZoneId)
        {
            return TimeZoneInfo.ConvertTimeFromUtc(thisDate, TimeZoneInfo.FindSystemTimeZoneById(timeZoneId));
        }
    }

我确认StartDateTime是'1/1/0001 12:00:00 AM',但不知何故,对DateTime.MinValue的检查不起作用,它会转到DateTimeHelper,当然会抛出异常。

我错过了什么?

2 个答案:

答案 0 :(得分:1)

如果有人感兴趣,我最终实施了一个解决方法:

public static DateTime ConvertFromUtc(DateTime thisDate, string timeZoneId)
{
   if (!String.IsNullOrEmpty(timeZoneId)) // workaround
      return TimeZoneInfo.ConvertTimeFromUtc(thisDate, TimeZoneInfo.FindSystemTimeZoneById(timeZoneId));

   return thisDate;
}

不理想,但是我可以继续工作。

答案 1 :(得分:0)

根据上面的代码,您的目标属性:“StartDateTime”是一个字符串。

我只是将代码放入观察窗口,这就是你得到的:

您的比较

Name:  "1/1/0001 12:00:00 AM" == DateTime.MinValue  
Value: Operator '==' cannot be applied to operands of type 'string' and 'System.DateTime'

我的比较

Name:  "1/1/0001 12:00:00 AM" == DateTime.MinValue.ToString()   
Value: true 
Type:  bool