C# 尝试使用defaultifempty方法连接2个以上的表时,在linq表达式中获取null引用错误

C# 尝试使用defaultifempty方法连接2个以上的表时,在linq表达式中获取null引用错误,c#,.net,linq,entity-framework,C#,.net,Linq,Entity Framework,如果第二个表中没有匹配项,我尝试使用defaultIfEmpty左键联接三个表,以指定null值,然后使用第二个表的值联接第三个表 var test = (from Eqpt in Eqpts join SystemEqpt in FleetSysEqpt on SystemEqpt.ID equals eqpt.SwCompanyEqptKey into sysEqptTemp from a in sysEqptTemp.DefaultIfEmp

如果第二个表中没有匹配项,我尝试使用defaultIfEmpty左键联接三个表,以指定null值,然后使用第二个表的值联接第三个表

var test = (from Eqpt in Eqpts
            join SystemEqpt in FleetSysEqpt on SystemEqpt.ID equals eqpt.SwCompanyEqptKey into sysEqptTemp
            from a in sysEqptTemp.DefaultIfEmpty()
            join System in System on a.SwFleetSystemKey equals System.ID 
)

当“a”变为null时,我得到null对象引用错误。加入时检查“a”是否为空的任何建议。

您只需添加一个
where
条件即可

var test = (from Eqpt in Eqpts
            join SystemEqpt in FleetSysEqpt on SystemEqpt.ID equals eqpt.SwCompanyEqptKey into sysEqptTemp
            from a in sysEqptTemp.DefaultIfEmpty()
            join System in System on a.SwFleetSystemKey equals System.ID 
            where a != null
)

您只需在其中添加一个
条件

var test = (from Eqpt in Eqpts
            join SystemEqpt in FleetSysEqpt on SystemEqpt.ID equals eqpt.SwCompanyEqptKey into sysEqptTemp
            from a in sysEqptTemp.DefaultIfEmpty()
            join System in System on a.SwFleetSystemKey equals System.ID 
            where a != null
)

不,我仍然得到相同的异常。将其添加到联接上方,而不是下方。现在我没有得到异常,但结果集是错误的。如果第二个表中没有记录,则最终结果不包括来自第一个表(Eqpts)的数据。它看起来像一个内部连接。不,我仍然得到相同的异常。将它添加到连接上方,而不是下方。现在我没有得到异常,但结果集是错误的。如果第二个表中没有记录,则最终结果不包括来自第一个表(Eqpts)的数据。它看起来像一个内部连接。不,我仍然得到相同的异常。将它添加到连接上方,而不是下方。现在我没有得到异常,但结果集是错误的。如果第二个表中没有记录,则最终结果不包括来自第一个表(Eqpts)的数据。它看起来像一个内部连接。