C# 需要Linq Select语句帮助-使用FirstOrDefault后出现NullReferenceException

C# 需要Linq Select语句帮助-使用FirstOrDefault后出现NullReferenceException,c#,linq,C#,Linq,我有一个LINQ语句来处理登录过程。当传递有效的用户名和密码组合时,它可以正常工作。但是,当我测试无效凭据时,我在下面的行中得到一个NullReferenceException错误,如果没有DBLogIn记录与您给出的条件匹配,则l方法将返回null,因此在访问(int)l.AccountIDFK之前,您需要先检查l是否为null。此外,它看起来像lbl\u LoginStatus.Text=“Invalid”,因此如果(_accountID

我有一个LINQ语句来处理登录过程。当传递有效的用户名和密码组合时,它可以正常工作。但是,当我测试无效凭据时,我在下面的行中得到一个
NullReferenceException
错误,如果没有
DBLogIn
记录与您给出的条件匹配,则
l
方法将返回null,因此在访问
(int)l.AccountIDFK
之前,您需要先检查
l
是否为null。此外,它看起来像
lbl\u LoginStatus.Text=“Invalid”l
为null时,应该执行code>,因此如果(_accountID<1 | | _accountID==null)阻塞并更改代码,则需要删除
,如下所示:

if (l != null)
{
    _accountID = (int)l.AccountIDFK;
    _securityLevelID = (int)l.SecurityLevelIDFK;
}
else
{
    // logic when l is null
    lbl_LoginStatus.Text = "Invalid";
}
或者,您也可以使用检查
l
是否为空

_accountID = l != null ? (int)l.AccountIDFK : 0;
_securityLevelID = l != null ? (int)l.SecurityLevelIDFK : 0;

if (_accountID < 1)
{
    lbl_LoginStatus.Text = "Invalid";
}
\u accountID=l!=无效的(int)l.AccountIDFK:0;
_SecurityLevel=l!=无效的(int)l.SecurityVelidfk:0;
如果(_accountID<1)
{
lbl_LoginStatus.Text=“无效”;
}
如果没有
DBLogIn
记录与您给出的条件匹配,则方法将返回null,因此您需要在访问
(int)l.AccountIDFK
之前先检查
l
是否为null。此外,它看起来像
lbl\u LoginStatus.Text=“Invalid”l
为null时,应该执行code>,因此如果(_accountID<1 | | _accountID==null)
阻塞并更改代码,则需要删除
,如下所示:

if (l != null)
{
    _accountID = (int)l.AccountIDFK;
    _securityLevelID = (int)l.SecurityLevelIDFK;
}
else
{
    // logic when l is null
    lbl_LoginStatus.Text = "Invalid";
}
或者,您也可以使用检查
l
是否为空

_accountID = l != null ? (int)l.AccountIDFK : 0;
_securityLevelID = l != null ? (int)l.SecurityLevelIDFK : 0;

if (_accountID < 1)
{
    lbl_LoginStatus.Text = "Invalid";
}
\u accountID=l!=无效的(int)l.AccountIDFK:0;
_SecurityLevel=l!=无效的(int)l.SecurityVelidfk:0;
如果(_accountID<1)
{
lbl_LoginStatus.Text=“无效”;
}
如果没有
DBLogIn
记录与您给出的条件匹配,则方法将返回null,因此您需要在访问
(int)l.AccountIDFK
之前先检查
l
是否为null。此外,它看起来像
lbl\u LoginStatus.Text=“Invalid”l
为null时,应该执行code>,因此如果(_accountID<1 | | _accountID==null)
阻塞并更改代码,则需要删除
,如下所示:

if (l != null)
{
    _accountID = (int)l.AccountIDFK;
    _securityLevelID = (int)l.SecurityLevelIDFK;
}
else
{
    // logic when l is null
    lbl_LoginStatus.Text = "Invalid";
}
或者,您也可以使用检查
l
是否为空

_accountID = l != null ? (int)l.AccountIDFK : 0;
_securityLevelID = l != null ? (int)l.SecurityLevelIDFK : 0;

if (_accountID < 1)
{
    lbl_LoginStatus.Text = "Invalid";
}
\u accountID=l!=无效的(int)l.AccountIDFK:0;
_SecurityLevel=l!=无效的(int)l.SecurityVelidfk:0;
如果(_accountID<1)
{
lbl_LoginStatus.Text=“无效”;
}
如果没有
DBLogIn
记录与您给出的条件匹配,则方法将返回null,因此您需要在访问
(int)l.AccountIDFK
之前先检查
l
是否为null。此外,它看起来像
lbl\u LoginStatus.Text=“Invalid”l
为null时,应该执行code>,因此如果(_accountID<1 | | _accountID==null)
阻塞并更改代码,则需要删除
,如下所示:

if (l != null)
{
    _accountID = (int)l.AccountIDFK;
    _securityLevelID = (int)l.SecurityLevelIDFK;
}
else
{
    // logic when l is null
    lbl_LoginStatus.Text = "Invalid";
}
或者,您也可以使用检查
l
是否为空

_accountID = l != null ? (int)l.AccountIDFK : 0;
_securityLevelID = l != null ? (int)l.SecurityLevelIDFK : 0;

if (_accountID < 1)
{
    lbl_LoginStatus.Text = "Invalid";
}
\u accountID=l!=无效的(int)l.AccountIDFK:0;
_SecurityLevel=l!=无效的(int)l.SecurityVelidfk:0;
如果(_accountID<1)
{
lbl_LoginStatus.Text=“无效”;
}
通过说

  // ... 
  }).FirstOrDefault();
如果找到匹配项,您将获得一个
DBLogIn
对象,如果不匹配,您将获得
null

在访问属性
AccountIDFK
SecurityLevelIDFK
之前,您需要检查null:

// ... }).FirstOrDefault();
if (l != null)
{
    _accountID = (int)l.AccountIDFK;
    _securityLevelID = (int)l.SecurityLevelIDFK;
}
需要考虑的其他几点:

  • 你不应该把它放在数据库里。一种更安全的方法是在数据库中存储散列(以及潜在的盐)密码,然后找到用户(通过
    EmailAddress and Active=1
    ),然后比较用户键入的内容和数据库中存储的内容的散列
  • 此代码-这使诊断问题成为一场噩梦:

    catch (Exception ex)
    {
        string error = ex.Message;
    }
    
  • public int\u accountID;
    )-如果它们没有在外部使用,则将它们设置为私有属性;如果它们在类外部可见,则将它们转换为(自动生成的)属性

  // ... 
  }).FirstOrDefault();
如果找到匹配项,您将获得一个
DBLogIn
对象,如果不匹配,您将获得
null

在访问属性
AccountIDFK
SecurityLevelIDFK
之前,您需要检查null:

// ... }).FirstOrDefault();
if (l != null)
{
    _accountID = (int)l.AccountIDFK;
    _securityLevelID = (int)l.SecurityLevelIDFK;
}
需要考虑的其他几点:

  • 你不应该把它放在数据库里。一种更安全的方法是在数据库中存储散列(以及潜在的盐)密码,然后找到用户(通过
    EmailAddress and Active=1
    ),然后比较用户键入的内容和数据库中存储的内容的散列
  • 此代码-这使诊断问题成为一场噩梦:

    catch (Exception ex)
    {
        string error = ex.Message;
    }
    
  • public int\u accountID;
    )-如果它们没有在外部使用,则将它们设置为私有属性;如果它们在类外部可见,则将它们转换为(自动生成的)属性

  // ... 
  }).FirstOrDefault();
如果找到匹配项,您将获得一个
DBLogIn
对象,如果不匹配,您将获得
null

在访问属性
AccountIDFK
SecurityLevelIDFK
之前,您需要检查null:

// ... }).FirstOrDefault();
if (l != null)
{
    _accountID = (int)l.AccountIDFK;
    _securityLevelID = (int)l.SecurityLevelIDFK;
}
需要考虑的其他几点:

  • 你不应该把它放在数据库里。一种更安全的方法是在数据库中存储散列(以及潜在的盐)密码,然后找到用户(通过
    EmailAddress and Active=1
    ),然后比较用户键入的内容和数据库中存储的内容的散列
  • 此代码-这使诊断问题成为一场噩梦:

    catch (Exception ex)
    {
        string error = ex.Message;
    }
    
  • public int\u accountID;
    )-如果它们没有在外部使用,则将它们设置为私有属性;如果它们在类外部可见,则将它们转换为(自动生成的)属性

  // ... 
  }).FirstOrDefault();
如果找到匹配项,您将获得一个
DBLogIn
对象,如果不匹配,您将获得
null

在访问属性
AccountIDFK
SecurityLevelIDFK
之前,您需要检查null:

// ... }).FirstOrDefault();
if (l != null)
{
    _accountID = (int)l.AccountIDFK;
    _securityLevelID = (int)l.SecurityLevelIDFK;
}
一些