C# 需要Linq Select语句帮助-使用FirstOrDefault后出现NullReferenceException
我有一个LINQ语句来处理登录过程。当传递有效的用户名和密码组合时,它可以正常工作。但是,当我测试无效凭据时,我在下面的行中得到一个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
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;
}
一些