2010-02-12 36 views
3

我有以下代碼:沒有結果LINQ查詢提供了對象引用未設置到IF ELSE語句的對象的實例

 DataClasses1DataContext db = new DataClasses1DataContext(); 

     var UserInfo = db.Users.FirstOrDefault(u => u.Email == TextBox1.Text); 

     if (UserInfo.Email != null) 
     { 
      Label2.Text = "Email is not null"; 
     } 
     else 
     { 
      Label2.Text = "Email is null"; 
     } 

如果電子郵件地址的表存在,它成功地打印「電子郵件不是空的。」然而,如果沒有匹配的記錄,然後我收到不設置到對象錯誤的實例第29行的對象引用:

 
Line 27:    DataClasses1DataContext db = new DataClasses1DataContext(); 
Line 28: 
Line 29:    var UserInfo = db.Users.FirstOrDefault(u => u.Email == TextBox1.Text); 
Line 30: 
Line 31:    if (UserInfo.Email != null) 

我難倒!任何幫助將不勝感激。

回答

0

試試這個:

var UserInfo = db.Users.FirstOrDefault(u => !string.IsNullOrEmpty(u.Email) && u.Email == TextBox1.Text); 
4

您可能要檢查在謂詞null,但如果它是一個真正的數據庫,它不應該是必要的:

var UserInfo = db.Users.FirstOrDefault(u => u != null && 
              u.Email == TextBox1.Text); 

但更重要的是,有第31行代碼中的一個明顯錯誤。如果FirstOrDefault找不到匹配的對象,則它不會返回所有字段都設置爲空的對象。它返回一個空引用 - 即根本沒有對象。你需要測試的是:

if (UserInfo != null) 
{ 
    Label2.Text = "User found"; 
} 
else 
{ 
    Label2.Text = "User not found"; 
} 

在我看來,你應該先修復明顯的錯誤,然後用正確的代碼更新您的問題,如果你仍然有問題。

+1

在這種情況下,第31行應該出現異常 – 2010-02-12 07:36:23

0

旁邊,你可以使用

db.Users.Any(u=> u.Email!=null && u.Email == TextBox1.Text); 
1
var UserInfo = db.Users.FirstOrDefault(u => u.Email == TextBox1.Text); 

你只能得到這條線上空裁判異常,如果dbTextBox1TextBox1.Text爲空。所有人都很懷疑。我認爲你有錯誤的路線。

+0

如果'db.Users'或'u'爲空,那麼怎麼辦?同樣''Textbox1.Text'爲空不應該給出例外。平等測試應該返回false。 – 2010-02-25 22:01:00

+0

你永遠不會獲得一個值(空值或其他值):它只是一個lambda表達式參數,用於生成表達式樹來生成一些sql。 db.Users不可能爲空,但我想可能。你是對的Textbox1.Text – 2010-02-26 14:28:22

+0

我相信'u'可以在LINQ-to-Objects中獲得'null'。這個問題提到了一個「表」,暗示着LINQ到SQL,但值得一提,因爲這種區別可能會非常棘手。 – 2012-10-25 17:24:37

0
Check you code 
var UserInfo = db.Users.FirstOrDefault(u => u.Email == TextBox1.Text); 

if (UserInfo.Email != null) // it is wrong 

首先你必須檢查的UserInfo是否爲null,則嘗試檢查它的成員,像這樣的:

if(UserInfo != null) 
{ 
// your code 
} 

這將解決您的問題。

0

你也應該爲 「的UserInfo」 太空檢查....

試試這個

如果(的UserInfo!= NULL & & UserInfo.Email!= NULL)

 { 
      Label2.Text = "Email is not null"; 
     } 
     else 
     { 
      Label2.Text = "Email is null"; 
     } 
相關問題