我正在努力通过外部联接来联接3个表。 下面是我的代码:
disabledColor
与此同时,我得到“对象引用未设置为对象的实例”。 我认为是因为我要加入字段“ res.Results_Id”,而该字段可能为null? 有办法解决吗?
答案 0 :(得分:0)
要调试此命令,我建议将其分为几个子查询。
但是在您的情况下,问题是DefaultIfEmpty
函数,它可能会返回
具有一个用于引用类型的“默认”元素的集合,默认值为null
因此,您需要先检查dnbres.Any()
是否始终为空,然后再对某物使用.
。
您可以使用?.
for null check并在最后提供默认值。
像这样:
if (obj?.IsValid ?? false)
{
// not valid or obj is null
}
因此您的代码将类似于:
if ((fp?.DataNodeBase?.IsAny() ?? false) &&
(fp?.Results?.IsAny() ?? false))
{
var nodedbs =
(from dnb in fp.DataNodeBase
join res in fp.Results on dnb.DataNodeBase_Id equals
res.DataNodeBase_Id into dnbres
from res in dnbres
join queryres in fp.DataNodeQueryResult on res.Results_Id equals
queryres.Results_Id into nodeandquery
from queryres in nodeandquery
where( dnb.Nodes_Id == operatorstation.OperatorStation_Id) &&
((dnb.IsNull("Family") ? "" : dnb.Family).Contains("FileCompare") == false)
select new
{
NodeID = dnb.Nodes_Id,
ResultsDataNodeBaseID = (res == null ? -1 : res.DataNodeBase_Id),
NodeDataBaseNodeID = dnb.DataNodeBase_Id,
DataNodeQueryResults = (queryres == null ? -1 : queryres.Results_Id)
}).ToArray();
}
答案 1 :(得分:0)
嗨,我在项目中遇到过几次这个问题,像这样更新您的代码以克服错误。您的部分代码如下
select new
{
NodeID = ((dnb != null)? dnb.Nodes_Id : 0),
ResultsDataNodeBaseID = ((res != null) ? res.DataNodeBase_Id : -1),
NodeDataBaseNodeID = ((dnb != null)? dnb.DataNodeBase_Id : 0),
DataNodeQueryResults = ((queryres != null) ? queryres.Results_Id : -1)
}).ToArray();
注意:在访问对象的数据成员之前,请检查对象是否为空