2012-07-20 139 views
2

我正在使用查詢來查看用戶是否已經存在於數據庫中。如果它找到一個用戶,它將它添加到列表(而不是數據庫)中,並顯示一條消息。如果用戶不存在,程序會繼續添加用戶。當找不到結果時,linq查詢返回什麼

將查詢結果添加到列表中時,存在問題,結果什麼都沒發現。如果查詢什麼都沒有發現(用戶還不存在),返回的值不是null或0,所以我不知道如何檢查這個。

我的代碼工作正常,但我的問題是試圖找到一個更優雅的方法。我嘗試將查詢結果添加到列表中。如果他是「抓」,那就意味着用戶不存在並且應該被添加。現在我的代碼是:

 var userIsNew = 
         from f in controlEntities.Users 
         where (f.UserId == userIdTextBox.Text) 
         select f; 

        List<Users> temp = new List<Users>(); 

        try 
        { 
         temp = userIsNew.ToList<Users>(); 
        } 
        catch 
        { 
         //do nothing 
        } 


        if (temp.Count > 0) 
        { 
         MessageBox.Show("This UserId already exists in the Database. \nPlease try another UserId."); 
        } 

感謝您的幫助!

+0

[邏輯異常](http://msdn.microsoft.com/en-us/library/dd264997.aspx)*幾乎總是*錯誤。 – mellamokb 2012-07-20 13:48:57

+1

對返回不匹配的結果調用'.ToList '應該可以正常工作。它只是一個有0個條目的列表。 – mellamokb 2012-07-20 13:53:47

+0

這是我第一次嘗試。但是當我嘗試添加沒有匹配任何列表的結果時,它會引發異常。所以我的解決方法是使用此拋出的異常作爲執行其餘代碼的一種方式。 – tomo 2012-07-20 13:56:56

回答

2
 var userIsNew = (from f in controlEntities.Users 
           where (f.UserId == userIdTextBox.Text) 
           select f).FirstOrDefault(); 


     if (userIsNew != null) 
     { 
      MessageBox.Show("This UserId already exists in the Database. \nPlease try another UserId."); 
     } 
+0

空和空是兩件不同的事情,所以我不相信這是一個正確的答案。我已經看到一個查詢返回一個非空對象,即使對象中的查詢結果指示沒有發現任何東西。 – shawn1874 2014-11-25 01:06:20

+0

如果總是找不到結果,FirstOrDefault應該返回null?你能詳細說明它如何與0結果無關 – user2330270 2014-12-01 08:52:28

0

另一種方法是:

 bool userIsNew = controlEntities.Users. 
      Count(f => f.UserId == userIdTextBox.Text) == 0; 

     if (!userIsNew) 
     { 
      MessageBox.Show("This UserId already exists in the Database. \nPlease try another UserId."); 
     } 

這是有效的,因爲數據服務器返回只有一個編號,而不是resulset。

相關問題