Почему вы ожидаете, что это сработает? Следующий код не компилируется:
DateTime dt1 = (DateTime)"2004-01-01";
Принимая во внимание, что это делает:
DateTime dt1 = DateTime.Parse("2004-01-01");
Таким образом, вы не можете просто привести строку к DateTime, поэтому, если ваше значение является строкой, вам нужно явно преобразовать ее.