我有一个Epicor BPM,在其中我试图测试订单(临时表ttOrderHed中的条目)是否有任何行(数据库表Db.OrderDtl中的IE条目。)>]
当我用已知有线的订单进行测试时,此方法有效;当我使用不使用的订单时,它返回NullReferenceException:
var oh = (from o in ttOrderHed select o).FirstOrDefault(); var od = (from d in Db.OrderDtl where d.Company == oh.Company && d.OrderNum == oh.OrderNum select d).FirstOrDefault(); if ( od != null) { //do some Things and Stuff }
我以为我可能正在测试null,因此退出了。我试图这样解决它:
if (!(od == null) { //do stuff }
并且有相同的例外。
我的调试变量到处都是,我可以肯定地说,用var od
做任何事情的尝试都会使我退学。例如,如果我尝试将其值分配给已在其他地方声明的调试变量b1 = od.OrderNum.ToString();
,我也会在此得到NullReferenceException,这只是早些时候。
我花了一整夜研究这个,并在这里阅读了非常好的概述:
What is a NullReferenceException, and how do I fix it?
到目前为止,我仍在画一个空白。我想,部分问题是我正在Epicor的内置IDE中工作,该IDE具有非常有限的语法检查器(说我很高兴)和ersatz的“ Intellisense”工具,但没有提供任何反馈或错误消息。我当然可以将输出发送到服务器的事件查看器,但是我得到的只是NullReferenceException本身。
任何反馈或建议,我们将不胜感激。提前非常感谢。
编辑:以防万一,这是最后的代码。我还有很多事情要做,但是这个已经解决了。
if (ttOrderHed.Any())
{
var oh = (from o in ttOrderHed select o).FirstOrDefault();
if ((from d in Db.OrderDtl where d.OrderNum == oh.OrderNum select d).Any())
{
var od = (from d in Db.OrderDtl
where d.OrderNum == oh.OrderNum
select d).FirstOrDefault();
var tmp = od.OrderNum;
// do stuff
} // end if OrderDtl
} // end if ttOrderHed
我有一个Epicor BPM,在其中我试图测试订单(临时表ttOrderHed中的条目)是否有任何行(数据库表Db.OrderDtl中的IE条目)。当我测试订单时...
似乎您是linq和设计模式的新手。通常最好检查集合是否为空<< [before