【问题标题】:Linq reference object not set to an instance of an object in select clause [duplicate]Linq 引用对象未设置为 select 子句中的对象实例 [重复]
【发布时间】:2017-09-15 09:10:19
【问题描述】:

这是我的代码:

            int loanAppFundId = 0;
            var loanAppDb = db.LoanApplications.FirstOrDefault(s => s.LoanId == vm.LoanId);

            if (loanAppDb != null)
            {
                if (vm.FundID != null && loanAppDb.FundID !=0)
                {
                    if (loanAppDb.FundID != vm.FundID)
                    {
                        string oldFund = "", newFund = "";
                        loanAppFundId = loanAppDb.FundID;

                        var oFund = db.Funds.Where(s => s.FundID == loanAppFundId);
                    }
                }
            }

在我尝试根据loanAppFundId 检索资金的最后一行是发生异常的地方,如果我将其设置为 0 或其他变量,它会毫无问题地继续进行,但每当我尝试设置一些变量时,我都会得到错误。

我故意将变量 loanAppFundId 初始化为值 0,但我再次收到错误,即引用对象未设置为对象的实例。

如果我在 db.Funds.Where 查询中设置了一些虚拟值,我就可以毫无问题地获得 loanAppDb.FundID 值。

我做错了什么?如果它为空或否,我对值进行了多次检查。

编辑

我不确定这个是如何重复的,因为我是在用真实的例子来提问,而不是一般性的问题。

【问题讨论】:

  • 只有您可以调试自己的程序并查看异常抛出的位置并检查堆栈跟踪。任何“其他眼睛”都帮不了你。
  • 在代码的第一行抛出异常,即 int loanAppFundId = 0;
  • 那是不可能的。必须是在那之前的那一行。
  • 不,正如我在问题解释中所说,如果我设置了一些特定值,可以说 22 代替 db.Funds.Where 行中的 loanAppFundId 变量,应用程序运行没有任何问题。
  • 能否包含堆栈跟踪(或发生异常的屏幕截图)?

标签: c# entity-framework linq linq-to-sql linq-to-entities


【解决方案1】:

很明显,即使loanAppDb 不为空但loanAppDb.FundID 为空。为避免这种情况,您也可以检查 loanAppDb.FundID 是否为 null:

 if (vm.FundID != null && loanAppDb.FundID!= null && loanAppDb.FundID !=0)
 {
      //your magic
 }

【讨论】:

  • 相同的输出@Ashkan
  • 仅供参考,默认情况下,表中的 FundID 字段不可为空。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-12
  • 1970-01-01
  • 2017-06-24
  • 1970-01-01
  • 1970-01-01
  • 2020-11-17
  • 1970-01-01
相关资源
最近更新 更多