2013-09-05 4 views
2

Может ли кто-нибудь сообщить мне о правильном использовании DBNull? Я разрабатываю проект MVC3, который имеет этот запрос в контроллере.Правильное использование DBNull

У меня есть запрос Linq, который возвращает поле, которое я знаю, не имеет никакого значения на первом цикле:

var qryGetBirthdate = (from c in db.Customer 
           select new 
            { 
             c.Birthdate 
            } 
          ).FirstOrDefault(); 

В базе данных Дата рождения тип Datetime, который является недействительным.

Проверку я для этого не так:

if (!DBNull.Value.Equals(qryGetBirthdate.Birthdate)) 
      { 
       DateTime? dob = qryGetBirthdate.Birthdate; 
      } 

Я пробовал вариации из других блогов, но не могу найти ответ. В основном я хочу уловить тот факт, что «qryGetBirthdate.Birthdate» еще не существует. Все, что я получаю, является исключением, что объект не настроен на ссылку, которую я знаю.

Что я делаю неправильно?

ответ

6

FirstOrDefault возвращает null для ссылочного типа, если последовательность пуста. В этом причина для NullRefernceException по адресу qryGetBirthdate.Birthdate. Поэтому проверьте, не является ли это:

if(qryGetBirthdate != null) 
{ 
    // now you can access it safely 
} 

Однако вам не нужно создавать анонимный тип.

DateTime? firstBirthdate = (from c in db.Customer 
          select c.Birthdate).FirstOrDefault(); 
+0

Вот и все! Спасибо Тиму. Я понимаю, что теперь я не должен использовать DBNull с L2S. Я отправил последний комментарий, прежде чем вы добавили «Тем не менее ...» Мне нравится более чистая версия, я сделаю это так. – user2284341

0

Если BirthDate является обнуляемым типа Datetime SQL, то c.Birthdate должен быть DateTime? в этом случае вы должны использовать:

DateTime? dob = qryGetBirthdate.Birthdate; 
+1

В моем сегменте кода вы увидите, что у меня уже есть это. – user2284341

+0

Насколько я понимаю, вы не можете сравнить его с DBNull - вы можете удалить предложение 'if'. –

0

Вы пробовали следующее. Вероятно, переменная имеет значение null, а не dbnull.

if (qryGetBirthdate != null && qryGetBirthdate.BirthDate != null && !DBNull.Value.Equals(qryGetBirthdate.Birthdate)) 
      { 
       DateTime? dob = qryGetBirthdate.Birthdate; 
      } 
Смежные вопросы