Проверка Null / MinValue в конфигурации Automapper - PullRequest
1 голос
/ 14 октября 2011

Я вытягиваю список клиентов, оставленных присоединиться к встречам.Поскольку у всех клиентов могут не быть встречи, основываясь на этом ответе , у меня есть следующая конфигурация 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 - «01.01.10001 12:00:00 AM», но каким-то образом проверка DateTime.MinValue не работает, и он переходит к DateTimeHelper, который, конечно, затем вызывает исключение.

Чего мне не хватает?

Ответы [ 2 ]

1 голос
/ 29 октября 2011

На случай, если кому-то будет интересно, я, наконец, применил обходной путь:

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

   return thisDate;
}

Не идеально, но выполняет свою работу, и я могу двигаться дальше.

0 голосов
/ 15 октября 2011

Исходя из кода выше, вашим целевым свойством: «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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...