Ошибка выдачи метода расширения LINQ при вводе комбинации адреса электронной почты и пароля (System.InvalidOperarationException)

1

Метод расширения LINQ бросает ошибку при вводе комбинации электронной почты и пароля, которая не существует в моей базе данных.

Ошибка: System.InvalidOperationException {"Последовательность не содержит элементов"}

Вот мой код

[HttpPost]
    public ActionResult Login(UserLogin userlogin)
    {          

        ViewBag.LoginError = "";
        if (ModelState.IsValid)
        {
            //no validation errors
           //userContext.Users gives a list with all users on databse
           //here is my linq query to select the user with valid email and password combination

            User loggedInUser = (from user in userContext.Users
                                 where user.EmailId == userlogin.UserEmail & user.Password == userlogin.UserPassword
                                 select user).First();//Error Source

            if (loggedInUser != null)
            {
                ViewBag.ValidUser = loggedInUser;
                return RedirectToAction("UserHomePage", "UserHome");
            }
            else
            {
                ViewBag.LoginError = "Invalid User name and Password Combination";
                return View("Index");
            }
        }
        return View("Index");
    }

и считает

Теги:
linq

2 ответа

2
Лучший ответ

Вы захотите использовать FirstOrDefault() а не First - это вернет null если элементы не найдены. Обычно вы также должны использовать оператор короткого замыкания && (not &), если вы не намеренно хотите, чтобы оба выражения были оценены.

1

Если нет пользователя с указанной комбинацией паролей имени пользователя, тогда запрос:

from user in userContext.Users
where user.EmailId == userlogin.UserEmail & user.Password == userlogin.UserPassword
select user

не приведет к отсутствию объектов, и вызов First() на нем выкинет это исключение.

Вы считали, FirstOrDefault() вместо использования FirstOrDefault(): если нет объектов, то он будет возвращать значение null (при условии, что user является ссылочным типом).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню