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

這裏的學生是我有AdmissionNo和Password列的表,如果表中存在No入口,則需要獲取密碼。如果在記錄中存在admissionNo,但是如果在記錄中未找到輸入的admissionNo,則此表達式將獲取給定的AdmissionNo的密碼,然後引發NullReference異常。在實體框架中選中null

我該如何檢查給定的AdmissionNo不是有效的AdmissionNO?

+0

使用簡單的if語句。 –

+1

調用'FirstOrDefault()。Something'永遠不是一個好主意。 'FirstOrDefault()'(按設計)表示可以返回'null'(對於引用類型),因此必須首先檢查。 – haim770

+0

在我們的項目中,我們創建了尚未保存在數據庫<= 0中的對象的Id。如果你不能這樣做,我會建議var x = FirstOrDefault();密碼= 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

這不起作用。帶有admissionNo == null的對象不會被x.AdmissionNo = AdmissionNo返回。 – DevilSuichiro

+0

非常感謝大家。 –

0

可以使用if語句」

if (AdmissionNo != null) 
{ 
    //your code 
} 
只是檢查null

您還可以檢查這是在EF 5.0

0

介紹ObjectContextOptions.UseCSharpNullComparisonBehavior Property你可以使用任何檢查:

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

或者用if語句:

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