Vb.net linq无法从数据库中找到该值,尽管它存在于数据库中
在mvc3中使用linq时,我注意到一些不规则之处 我有一个带有“PIN”列的数据库表。列必须有28个字符,并且可以存储完全随机的字符。然后我有一个控制器动作:Vb.net linq无法从数据库中找到该值,尽管它存在于数据库中,vb.net,asp.net-mvc-3,linq,Vb.net,Asp.net Mvc 3,Linq,在mvc3中使用linq时,我注意到一些不规则之处 我有一个带有“PIN”列的数据库表。列必须有28个字符,并且可以存储完全随机的字符。然后我有一个控制器动作: Function Unlock() As ActionResult Dim key As String = Request("token") If key IsNot Nothing Then Dim user As Users = db.Users.SingleOrDef
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保持“Co/5c1mil2e+clGK3c6JvdrGpQ=”键字符串从querystring读取完整字符串时,但用户引用总是以零结尾,即使相同的值存储在数据库中
另一方面,当PIN保持“GbgI4QAaYWanaKWUm6j7Jg5IpA8=”时,一切正常。所以我认为linq可能在某些字符(如/或+)上有问题,但如何解决这个问题呢?试试看
u.PIN.等于(键)
在调试时使用intelliTrace将对linq有很大帮助
同样,在这种情况下,FirtsOrDefault接缝对我来说更合理,而不是SingleOrDefault尝试将single'='替换为'=='@bhuvin:这是VB.NET,不存在==ohh@DanielHilgarth-对不起……我没有注意到请求(“令牌”)将+替换为空白,所以,它首先需要进行url编码,而不是直接将字符串插入url栏。这是我的错误,所以不是linq的错。但我会把你的答案标记为正确,因为使用firstordefault更合理