C# 处理null查询c当等于null时,对象引用未设置为对象的实例

C# 处理null查询c当等于null时,对象引用未设置为对象的实例,c#,sql,linq,C#,Sql,Linq,我在将sql转换为关于左连接的查询c时遇到问题 下面是sql查询 select mTeacher.Id as Id, mTeacher.Name as Name, mStudents.Name as Addresses from Teachers mTeacher left join Students mStudents on mStudents.TeacherId=mTeacher.Id where mStudents.Name = 'some of word' 这里我转换

我在将sql转换为关于左连接的查询c时遇到问题 下面是sql查询

select mTeacher.Id as Id, mTeacher.Name as Name, mStudents.Name as Addresses
from Teachers mTeacher
 left join Students mStudents
    on mStudents.TeacherId=mTeacher.Id
    where mStudents.Name = 'some of word'
这里我转换成sql来查询c

 var zzz= from mTeacher in repo.Teachers
                      join mStudents in repo.mStudents on mTeacher.Id equals mStudents.TeacherId into a
                      from y1 in a.DefaultIfEmpty()
                      where mTeacher.Name.Equals("someofword") or mStudent.Name.Equals("somofword")
                      select new { mTeacher.Id,mTeacher.Name};
将有一个学生将有空值 mStudent.Name.Equalssomofword
我得到了这样的信息:如何处理这个问题如果我使用SQL查询,您的where子句只查找Student.Name

根据您的where查询,该值必须不为null。所以我建议你只使用一个内部连接。这也将解决您的C转换问题

如果仍要保留该复选框,则可以将where子句修改为:

where mTeacher.Name.Equals("someofword") or (mStudent != null && mStudent.Name.Equals("somofword"))
空检查将确保您不会遇到对象为空的错误。请记住,如果是左连接,学生值可以为空

如果您引用的是学生表中的值,还可以在select子句中添加类似的null检查

 select new { mTeacher.Id,mTeacher.Name, StudentName = ( y1 == null ) ? "No Student" : y1.Name};

不重复的可能重复我认为我的情况不同,我在我的情况下使用where,但另一个noYou可以尝试不使用where子句的查询,这可能有助于发现问题。linq查询中的y1是什么,应该不是mStudent吗?应该是,但我得到了不同的结果