2012-07-18 50 views
0

我注意到在mvc3中使用linq時存在一些不規則性。linq無法從數據庫中找到值,雖然它存在於數據庫中

我有一個「PIN」列的數據庫表。列必須有28個字符,並且可以存儲完整的隨機字符。然後,我有一個控制器的動作:

Function Unlock() As ActionResult 
     Dim key As String = Request("token") 
     If key IsNot Nothing Then 
      Dim user As Users = db.Users.SingleOrDefault(Function(u) u.PIN = key) 
      If user IsNot Nothing Then 
       user.PIN = Nothing 
       db.SaveChanges() 
       Return View() 
      End If 
     End If 
     Return RedirectToAction("Index", "Home", New With {.Area = ""}) 
    End Function 

例如,當PIN舉辦的「鈷/ 5c1mmil2e + clGK3c6JvdrGpQ =」密鑰字符串讀取從查詢字符串滿弦,但用戶參考最終總是什麼都沒有,即使是相同的值存儲在數據庫中。

另一方面,當PIN持有「GbgI4QAaYWanaKWUm6j7Jg5IpA8 =」時,一切正常。所以我想,linq可能會遇到像/或+這樣的字符問題,但是如何解決這個問題呢?

+1

更合理,我試着用「==」 – bhuvin 2012-07-18 10:06:30

+0

@bhuvin取代單一的「=」:這是VB.NET,不存在== – 2012-07-18 10:09:52

+0

喔@DanielHilgarth - 對不起人... – bhuvin 2012-07-18 10:10:22

回答

1

嘗試 u.PIN.Equals(key)

使用的IntelliTrace同時調試運行它會幫助你很多使用LINQ。

而且FirtsOrDefault接縫在這種情況下,代替的SingleOrDefault

+0

我沒有注意到Request(「token」)用空格替換了+,所以不是直接將字符串插入到url欄中,而是首先需要進行url編碼。這是我的錯誤,所以它不符合linq。但是我會將您的答案標記爲正確的,因爲使用firstordefault更合理 – 2012-07-18 10:41:51

相關問題