DateTime, DateTime? и LINQ

Когда я получаю запись с использованием LINQ, у которой есть поле DateTime, доступен только ToString().

Где все остальные методы DateTime?

Мне нужно Convert.ToDateTime DateTime? что поле возвращает?

В чем разница между (DateTime) и (DateTime?)

Ответ 1

Если на DateTime? вы имеете в виду a Nullable<DateTime>, то вы можете получить значение DateTime с помощью свойства DateTime?. Value.

Ответ 2

В SQL время DateTimes имеет значение null. В С# DateTimes не может быть нулевым. Вы можете немного прочитать о свойствах с нулевым значением. Поскольку переменные с вводом значений не могут быть нулевыми, для обработки этой ситуации был создан общий класс. Он называется Nullable < > и он обычно записывается с вопросительным знаком после типа.

Чтобы использовать эти значения, вы захотите проверить свойство .HasValue. Это логическое значение, которое знает, есть ли значение в объекте или оно равно null. После того, как вы проверили, что свойство .HasValue истинно, вы можете безопасно использовать свойство .Value. Свойство .Value будет иметь тип DateTime.

Ответ 3

В SQL у вас поле DateTime установлено значение Allow Null. Затем в LINQ, когда вы собираетесь получить доступ к полю,.NET не знает, действительно ли поле является датой или нет, поэтому вам нужно преобразовать T.ToDateTime(), прежде чем какие-либо методы становятся доступными для вас.

Если поле всегда будет содержать дату, установите для столбца базы данных значение NOT NULL, и вы должны быть в порядке.

Ответ 4

Столкновение пространства имен в стороне, я знаю, что SQL datetime имеет другую эпоху (и, следовательно, другой диапазон допустимых дат), чем С# datetime.

Попробуйте отправить new DateTime() в хранимую процедуру и посмотреть, что я имею в виду.