Проблема
Учитывая следующее:
class MyClass
{
public DateTime DateTime { get; set; }
}
и запрашиваемый, где MyTable.NullableDateTime
- это DateTime?
, сопоставленный с SQL datetime
:
IQueryable<MyTable> table = //something
Выполнение следующего вызывает исключение, когда столбец NullableDateTime
строки равен NULL
:
table.Select(row => new MyClass
{
DateTime = Convert.ToDateTime(row.NullableDateTime)
}).ToArray();
Ошибка:
InvalidOperationException
Нулевое значение не может быть присвоено члену с типом System.DateTime, который является типом значения, не допускающим значения NULL.
Что я пробовал
Глядя на сгенерированный SQL:
CONVERT(DateTime,[t0].[NullableDateTime]) AS [NullableDateTime]
Выполнение запроса перед выполнением
Select
. Это позволяет обойти проблему, но я не хочу запускать это на стороне клиента, чтобы обойти проблему.- # P9 #
# P10 # # P11 #
# P12 #COALESCE([t0].[NullableDateTime],'1/01/0001 12:00:00 AM') AS [NullableDateTime]
NullableDateTime
? Я предполагаю, что вы не можете изменить тип в базе данных ... - person Gert Arnold   schedule 22.05.2013datetime
, сопоставленный с .NETDateTime?
. - person Sam   schedule 22.05.2013MyClass.DateTime
не допускает значения NULL? Если бы это было, вам не потребовалось бы никакого преобразования. - person Gert Arnold   schedule 22.05.2013default(DateTime)
, потому что вы находитесь в .Net. Плохо то, что вам придется проверитьDateTime.MinValue
, где адресMyClass.DateTime
. - person Gert Arnold   schedule 22.05.2013default(DateTime)
не работает, потому что, как следует из принятого ответа, он выходит за пределы диапазона SQLdatetime
, поэтому при выполнении запроса он создает недопустимый SQLdatetime
. - person Sam   schedule 23.05.2013