2015-10-19 49 views
1
string password = Infoware.Students.FirstOrDefault(x=>x.AdmissionNo == AdmissionNo && x.AdmissionNo != null).Password; 

这里的学生是我有AdmissionNo和Password列的表,如果表中存在No入口,则需要获取密码。如果在记录中存在admissionNo,但是如果在记录中未找到输入的admissionNo,则此表达式将获取给定的AdmissionNo的密码,然后引发NullReference异常。在实体框架中选中null

我该如何检查给定的AdmissionNo不是有效的AdmissionNO?

+0

使用简单的if语句。 –

+1

调用'FirstOrDefault()。Something'永远不是一个好主意。 'FirstOrDefault()'(按设计)表示可以返回'null'(对于引用类型),因此必须首先检查。 – haim770

+0

在我们的项目中,我们创建了尚未保存在数据库<= 0中的对象的Id。如果你不能这样做,我会建议var x = FirstOrDefault();密码= x == null?null:x.Password – DevilSuichiro

回答

0

你只需把你的测试的其他方式(因为他们将快捷方式):当什么也没发现

string password = Infoware.Students.FirstOrDefault(x=> x.AdmissionNo != null 
            && x.AdmissionNo == AdmissionNo).Password; 

,重新阅读你的问题,你的问题是...

所以:

string password; 

var result = Infoware.Students.FirstOrDefault(x=> x.AdmissionNo != null 
             && x.AdmissionNo == AdmissionNo); 


if (result != null) { 
    password = result.Password; 
} 
+1

这不起作用。带有admissionNo == null的对象不会被x.AdmissionNo = AdmissionNo返回。 – DevilSuichiro

+0

非常感谢大家。 –

0

可以使用if语句”

if (AdmissionNo != null) 
{ 
    //your code 
} 
只是检查null

您还可以检查这是在EF 5.0

0

介绍ObjectContextOptions.UseCSharpNullComparisonBehavior Property你可以使用任何检查:

.Any(a => a.AdmissionNo == null) 

或者用if语句:

string user = Infoware.Students.FirstOrDefault(x=>x.AdmissionNo == AdmissionNo && x.AdmissionNo != null); 
if(user != null) 
{ 
    password = user.Password; 
}