2015-10-19 2 views
1
string password = Infoware.Students.FirstOrDefault(x=>x.AdmissionNo == AdmissionNo && x.AdmissionNo != null).Password; 

Здесь учащиеся - это таблица, в которой у меня есть столбцы AdmissionNo и Password, вам нужно получить пароль, если вход отсутствует в таблице. Это выражение запрашивает пароль для данного параметра AdmissionNo, если вход в записи отсутствует, но если введенное объявление не найдено в записях, оно бросает исключение NullReference.Отклонить null в Entity framework

Как я могу проверить, что данный прием является недействительным?

+0

использование простой, если заявление. –

+1

Вызов 'FirstOrDefault(). Что-то' никогда не является хорошей идеей. 'FirstOrDefault()' (по дизайну) выражает, что «null» может быть возвращен (для ссылочных типов), поэтому его необходимо сначала проверить. – haim770

+0

В нашем проекте мы создали объекты Id, которые еще не сохранены в базе данных <= 0. Если вы не можете этого сделать, я бы предложил var x = FirstOrDefault(); password = x == null? null: x.Password – DevilSuichiro

ответ

0

Вам просто нужно положить ваши тесты наоборот (как они будут ярлык):

string password = Infoware.Students.FirstOrDefault(x=> x.AdmissionNo != null 
            && x.AdmissionNo == AdmissionNo).Password; 

И перечитывая свой вопрос, вы выдаете это когда ничего не найдено ...

Итак:

string password; 

var result = Infoware.Students.FirstOrDefault(x=> x.AdmissionNo != null 
             && x.AdmissionNo == AdmissionNo); 


if (result != null) { 
    password = result.Password; 
} 
+1

это не сработает. объекты с допускомNo == null не будут возвращены x.AdmissionNo = AdmissionNo anyways. – DevilSuichiro

+0

Спасибо много людей. –

0

Вы можете проверить его с помощью любой:

.Any(a => a.AdmissionNo == null) 

Или с помощью, если заявление:

string user = Infoware.Students.FirstOrDefault(x=>x.AdmissionNo == AdmissionNo && x.AdmissionNo != null); 
if(user != null) 
{ 
    password = user.Password; 
} 
Смежные вопросы