Согласно Fixing LINQ Error: последовательность не содержит элементов , это исключение возникает при использовании First()
или Single()
, который содержит пустые данные.Обычный способ исправить это исключение - использовать FirstOrDefault()
, SingleOrDefault()
или DefaultIfEmpty()
, но учтите, что ссылочные объекты содержат нулевое значение при использовании FirstOrDefault()
или SingleOrDefault()
и должны быть проверены перед доступом к любым элементам внутри него..
Следовательно, присваивания переменных сеанса должны проверяться по нулевому значению, как показано ниже:
// Customers
var cust = db.CustomerAccounts.Single(x => x.Email == user.Email);
if (cust != null)
{
Session["CustId"] = cust.CustId;
}
// Admins
var admin = db.Admins.SingleOrDefault(x => x.Email == admnLogin.Email);
if (admin != null)
{
Session["AdminId"] = admin.AdminID;
}
Для C # 6 и выше, вы можете использовать нулевой условный оператор при доступе к членам собственности после SingleOrDefault()
:
// Customers
Session["CustId"] = db.CustomerAccounts.SingleOrDefault(x => x.Email == user.Email)?.CustId;
// Admins
Session["AdminId"] = db.Admins.SingleOrDefault(x => x.Email == admnLogin.Email)?.AdminID;