2015-08-18 2 views
1

Я хочу написать пароль забыть как тренировку, и теперь у меня есть проблема с ним.Найти столбец по электронной почте в 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, а не значение колонки Я хочу

Что случилось с моим кодом?

Что касается

+0

Replace .ToString() с .FirstOrDefault() –

ответ

1

Ну, вопрос: это утверждение может возвращать несколько строк:

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; 
+1

большое спасибо за помощь мне, вы ответите единственный ответ тока для меня, и вы объяснили это очень очень хорошо, спасибо еще раз, с уважением – Spaceman

0

Вы возвращаетесь .ToString(), который показывает SQL за запрос LINQ.

Извлекает объект пользователя, то доступ к его 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; 
} 
0

Вы возвращаете .ToString(), который показывает SQL за запросом LINQ.

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

Что делать, если ни одна строка не соответствует вашим критериям!?!?! ==> 'NullReferenceException' ..... –

+0

@marc_s теперь отредактирован. –

0

Попробуйте:

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

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