Я все еще изучаю LINQ. Я могу сделать несколько простых запросов, но это немного другое. У меня есть следующий запрос, который аутентифицирует пользователя.Как использовать linq для аутентификации имени пользователя/пароля?
User user = (from u in db.Users
where u.Username.Equals(username) &&
u.Password.Equals(UserSecurity.GetPasswordHash(username, password)) &&
u.Status == true
select u).FirstOrDefault();
Это работает, но теперь мне нужно войти в систему, почему логин не удался. Если было неверное имя пользователя, я зарегистрирую одно. Если пароль был неправильным, я запишу еще один. Или, если пользователь неактивен (status = false), я запишу еще один. Я понимаю, что могу разделить это на 3 отдельных запроса, чтобы выяснить, что не удалось, но мне было интересно, будет ли это более эффективно делать это в одном. Если да, то как? Это мой подход (непроверенный) 3.
User user2 = null;
var users1 = db.Users.Where(i => i.Username.Equals(username));
if (users1 != null)
{
var users2 = users1.Where(i => i.Password.Equals(UserSecurity.GetPasswordHash(username, password)));
if (users2 != null)
{
var users3 = users2.Where(i => i.Status);
if (users3 != null)
{
user2 = users3.FirstOrDefault();
}
else
{
// User inactive
}
}
else
{
// Password invalid.
}
}
else
{
// Username invalid
}
Я согласен с тем, что вы должны показывать только диалоговое окно «Неверное имя пользователя или пароль». Но это для ведения журнала. И обычный пользователь не имеет прав на чтение журнала. – bsh152s
@ bsh152s, следуя тому же подходу, я добавил пример, который обеспечит требуемую детализацию. –
Спасибо, вот что я пришел после прочтения вашего первого ответа. Наверное, я немного переусердствовал. – bsh152s