当测试行为返回NullReferenceException类型时,如何在Epicor BPM中测试null变量?

问题描述 投票:0回答:1

我有一个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条目)。当我测试订单时...

c# entity-framework linq-to-sql epicor10
1个回答
0
投票

似乎您是linq和设计模式的新手。通常最好检查集合是否为空<< [before

© www.soinside.com 2019 - 2024. All rights reserved.