мне записали приложение на 2008.
Мы используем linq для объектов.
Мы должны были теперь переключить DB на 2005. Я получаю следующую ошибку на linq Запросах Select:
Ошибка - переполнение SqlDateTime. Должен быть между 01.01.1753 0:00:00 и 31.12.9999 23:59:59.
Незаконная строка:
DateOfBirth = ((s.Date_Of_Birth == null) || (s.Date_Of_Birth <= lowdate)) ?
DateTime.MinValue : s.Date_Of_Birth.Value,
DateOfBirth имеет тип DateTime и свойство в нашем объекте собственного дела (не объект).
Кто-либо знает, как я могу изменить эту строку для создания этого запроса выполненным?
Убедитесь, что lowdate
не меньше 1/1/1753.
Если вы попытаетесь указать дату до этого, EF преобразует ее и передаст в ваш запрос. Кроме того, вам нужно не использовать DateTime.MinValue
в запросе, а использовать то, что будет вашим min:
DateOfBirth = ((s.Date_Of_Birth == null) || (s.Date_Of_Birth <= lowdate)) ?
new DateTime(1753,1,1) : s.Date_Of_Birth.Value;
Помните, что с EF запрос компилируется и преобразуется в SQL на сервере, поэтому все ценности и здесь должны быть подходящими.
При этом я лично предпочел бы сохранить DateOfBirth
как DateTime?
(тип, допускающий значение NULL) вместо использования «магического значения» ( DateTime.MinValue
) для хранения пустых или несоответствующих значений базы данных.
Это часто происходит, когда вы пытаетесь сохранить DateTime.MinValue в поле SQL DateTime
Кроме того, чтобы добавить сюда хорошие ответы, попробуйте использовать SqlDateTime.MinValue вместо 1/1/1973 или DateTime.MinValue.
http://msdn.microsoft.com/en-us/library/system.data.sqltypes.sqldatetime.minvalue.aspx
Конечно, это то же самое, что и 01.01.1973, но это много чище и намного менее волшебно.
DateTime.MinValue
эквивалентно 00: 00: 00.0000000, 1 января 0001
.
А DateTime в SQL 2005 находится между 01.01.1753 12:00:00 AM и 31.12.1999 11:59:59 P
Вместо использования DateTime.MinValue следует создать
public static DateTime DateTimeMinValueInSQL2005 = new DateTime(1753,1,1);
и используйте его вместо DateTime.MinValue;
Конечно, замените DateTime.MinValue на «01.01.1753 12:00:00 AM»