Linq to SQL: спрашивать, пуста ли дата - PullRequest
1 голос
/ 13 января 2009

У меня новый экземпляр объекта в Linq DBML, но я не знаю о тесте, если поле даты пусто.

Я пробовал:

If d Is Nothing OrElse IsDBNull(d) OrElse d <= Date.MinValue Then
   TextValue = "nada"
Else
   TextValue = FormatDateTime(d)
End If

Но результат "12:00:00 утра"

edit: изменено имя переменной d
edit: обратите внимание, что поле SQL имеет значение NULL

edit II: Извините, ребята, ошибка была в другой части кода. Сравнение ни с чем - решение

Ответы [ 2 ]

3 голосов
/ 14 января 2009

Код, который вы хотите (надеюсь) ..

If MyNullableDateObject.HasValue Then
   TextValue = FormatDateTime(MyNullableDateObject.Value)
Else
   TextValue = "nada"
End If

Если поле SQL принимает значения Null, то конструктор Linq to SQL сопоставляет его с типом .net Nullable, например, SQL DateTime будет сопоставлен с типом с именем Date ?. Если вы посмотрите на свойства поля в конструкторе Linq to SQL, у него должно быть свойство Nullable, которое, если схема SQL допускает значения NULL в этом поле, будет установлено в значение true.

Необнуляемые (то есть обычные) типы дат являются типами значений, а не типами объектов, поэтому «Ничего не помогает». IsDBNull предназначен для типов в System.Data.SqlTypes, но Linq to SQL сопоставляется с «нативными» .Net типами, так что это тоже не помогает.

См. - Типы Nulllable


EDIT

Вы можете подумать о переименовании переменной Value во что-то другое (как я уже делал выше), поскольку, конечно, это не тип Value, а Value - плохое имя.

Также обратите внимание, что в VB Nullable тип может быть объявлен двумя эквивалентными способами

Dim d As Date?
Dim d As Nullable(Of Date)

Надеюсь, это имеет смысл.

0 голосов
/ 14 января 2009

Я не уверен, будет ли это работать, но вы, вероятно, хотите сравнить с Empty (или сделать вызов IsEmpty), так как 12:00 утра НЕ является нулевым значением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...