在asp.net实体框架中通过电子邮件查找列

本文关键字:电子邮件 查找 asp net 实体 框架 | 更新日期: 2023-09-27 18:08:24

我想写忘记密码作为培训,现在我有一个问题。

我需要找到一个userId,但我的代码目前不工作,它告诉我SQL代码。

这是我的代码:

private string NewPass()
{
    UserManager<IdentityUser> userManager =
        new UserManager<IdentityUser>(new UserStore<IdentityUser>());
    string userId = (from x in db.AspNetUsers
                     where x.Email == txtEmail.Text
                     select x.Id).ToString();
    return userId;
}

我有一个电子邮件地址,现在我想通过电子邮件地址

找到userId

但是我说过,我的代码只显示了SQL语句,而不是我想要的列的值

我的代码有什么问题?

在asp.net实体框架中通过电子邮件查找列

问题是:这个语句可以返回多行:

from x in db.AspNetUsers
where x.Email == txtEmail.Text
select x.Id

所以你不能直接把它转换成字符串

你需要做的是:

  • 从结果集
  • 中选择第一行(或者可能是唯一一行)
  • 确保它不是NULL
  • 则返回Id

试试这个:

 var users = (from x in db.AspNetUsers
              where x.Email == txtEmail.Text
              select x).FirstOrDefault();
 string userId = string.Empty;
 if (users != null) 
 { 
    userId = users.Id;
 }
 return userId;

您将返回。tostring(),它显示了LINQ查询背后的SQL。

获取用户对象,然后访问它的ID,就像这样(根本没有测试):

private string NewPass()
{
    UserManager<IdentityUser> userManager =
        new UserManager<IdentityUser>(new UserStore<IdentityUser>());
    /// Fetch the user object
    IdentityUser user = (from x in db.AspNetUsers
                     where x.Email == txtEmail.Text
                     select x).SingleOrDefault();
    return user != null ? user.Id : String.Empty;
}

您将返回。tostring(),它显示了LINQ查询背后的SQL。

private string NewPass()
{
UserManager<IdentityUser> userManager =
    new UserManager<IdentityUser>(new UserStore<IdentityUser>());
IdentityUser user = (from x in db.AspNetUsers
                 where x.Email == txtEmail.Text
                 select x).FirstOrDefault();
if(user !=null)
return user.Id;
}

Try This:

var x = from data in _db.AspNetUsers.AsQueryable() 
where data.Email == txtEmail.Text select data.Id;
        if (x.Any())
        {
            // do your opertion
        }