在 asp.net Entity Framework 中通过电子邮件查找专栏

Find a column by email in asp.net Entity Framework

我想写忘记密码作为培训,现在我遇到了问题。

我需要找到一个 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 语句,而不是我想要的列的值

我的代码有什么问题?

尊重

您正在返回 .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;
}

嗯,问题是:这个语句 可以 return 多行:

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

所以你不能只将其转换为字符串。

您需要做的是:

  • select 结果集中的第一行(或可能唯一的一行)
  • 确保它不是 NULL
  • 然后 return 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。

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;
}

试试这个:

var x = from data in _db.AspNetUsers.AsQueryable() 
where data.Email == txtEmail.Text select data.Id;

        if (x.Any())
        {
            // do your opertion
        }