Проблемы
Учитывая следующее:LINQ для исключения SQL при преобразовании обнуляемого значения ненулевого, используя Преобразование
class MyClass
{
public DateTime DateTime { get; set; }
}
и Queryable, где MyTable.NullableDateTime
является DateTime?
сопоставлен с SQL datetime
:
IQueryable<MyTable> table = //something
Выполнение следующих условий создает исключение, если столбец NullableDateTime
содержит NULL
:
table.Select(row => new MyClass
{
DateTime = Convert.ToDateTime(row.NullableDateTime)
}).ToArray();
Ошибка:
InvalidOperationException
The null value cannot be assigned to a member with type System.DateTime which is a non-nullable value type.
Что я Пробовал
Глядя на сгенерированного SQL:
CONVERT(DateTime,[t0].[NullableDateTime]) AS [NullableDateTime]
Выполнение запроса перед выполнение
Select
. Это работает вокруг проблемы, но я не хочу запускать ее на стороне клиента, чтобы обойти эту проблему.Использование
row.GetDefaultValue()
вместоConvert.ToDateTime
. Это дает другую ошибку:SqlException
The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
Вызов
GetDefaultValue
метода преобразуется в следующем SQL:COALESCE([t0].[NullableDateTime],'1/01/0001 12:00:00 AM') AS [NullableDateTime]
Какой тип 'NullableDateTime'? Я предполагаю, что вы не можете изменить тип в базе данных ... –
Это SQL 'datetime', сопоставленный с .NET' DateTime? '. – Sam
Но почему 'MyClass.DateTime' не имеет значения NULL? Вы не нуждались бы в каком-либо преобразовании, если бы это было так. –