“将'system.linq.IQueryable(String)'转换为'String'时可能会发生运行时错误

时间:2013-03-05 16:40:41

标签: vb.net linq global-variables

我正在创建一项功能,允许用户输入电子邮件地址并点击“搜索”。这将搜索我的数据库并返回电子邮件地址,然后我将使用其他方法随机生成密码并通过电子邮件发送。语言是ASP.VB,数据库是LINQ。我收到错误说“将'system.linq.IQueryable(String)'转换为'String'时可能会发生运行时错误”

代码段是:

 Protected Sub btnSearchEmail_Click(sender As Object, e As System.EventArgs) Handles         btnSearchEmail.Click

    Dim db As New DatabaseDataClassesDataContext()

    GlobalVariables.SearchUserEmail = txtSearchEmail.Text

    GlobalVariables.CurrentEmailAddress = (From u In db.User_Signons
                                           Where u.Email = SearchUserEmail
                                           Select u).Distinct


End Sub

关于如何解决这个问题的任何想法。全局变量都是“As String”,DB中的字段是varchar。提前致谢

2 个答案:

答案 0 :(得分:2)

Distinct调用返回一系列字符串,您指定的属性只是一个字符串。请考虑使用FirstFirstOrDefault代替Distinct

答案 1 :(得分:0)

问题在于:

GlobalVariables.CurrentEmailAddress = (From u In db.User_Signons
                                       Where u.Email = SearchUserEmail
                                       Select u).Distinct

Distinct返回不同值的集合。如果您只想使用一个值

var user = (From u In db.User_Signons
            Where u.Email = SearchUserEmail
            Select u).First

GlobalVariables.CurrentEmailAddress = user.Email

' Do something with password

请注意:

  1. 这只会给你第一个值(很明显)
  2. 如果没有结果,它将抛出异常(使用FirstOrDefault返回默认值(字符串为null),如果这是合法的可能性。