DateTime, DateTime? и LINQ - PullRequest
       11

DateTime, DateTime? и LINQ

11 голосов
/ 04 октября 2008

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

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

Мне нужно конвертировать. Дата-время Дата-время? что поле возвращает?

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

Ответы [ 4 ]

16 голосов
/ 04 октября 2008

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

9 голосов
/ 04 октября 2008

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

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

2 голосов
/ 04 октября 2008

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

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

0 голосов
/ 04 октября 2008

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

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

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