如果linq查询找不到匹配的记录,则对象引用未设置错误? [重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果linq查询找不到匹配的记录,则对象引用未设置错误? [重复]相关的知识,希望对你有一定的参考价值。

我有这个代码

public object GetMaxReportNo(string OfficeStationCombination = "")
        {
            try
            {
                InspectionReport InspectionReport = new InspectionReport();
                string VelosiReportNo = "";

                var query = uow.InspectionReportRepository.GetQueryable().AsQueryable();

                if (query.Any())
                {
                    VelosiReportNo = query.Where(x => x.VelosiReportNo.Contains(OfficeStationCombination)).OrderByDescending(x => x.InspectionReportID).DefaultIfEmpty(null).FirstOrDefault().VelosiReportNo;
                }

                return VelosiReportNo;
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

这一行:

VelosiReportNo = query.Where(x => x.VelosiReportNo.Contains(OfficeStationCombination)).OrderByDescending(x => x.InspectionReportID).DefaultIfEmpty(null).FirstOrDefault().VelosiReportNo;

抛出错误:

你调用的对象是空的。

当我传递一个数据库中尚不存在记录的参数时。但是,我无法弄清楚它返回的是什么?我该如何控制它?

我已经处理了null,但这不起作用。如果不填写记录,我如何处理,以便我可以在此基础上做出决定?

答案
query.Where(x => x.VelosiReportNo.Contains(OfficeStationCombination)).Any()

做了伎俩。

完整代码;

                if (query.Any())
                {
                    if (query.Where(x => x.VelosiReportNo.Contains(OfficeStationCombination)).Any())
                    {
                        VelosiReportNo = query.Where(x => x.VelosiReportNo.Contains(OfficeStationCombination)).OrderByDescending(x => x.InspectionReportID).FirstOrDefault().VelosiReportNo;
                    }
                    else
                    {
                        VelosiReportNo = null;
                    }

                }
另一答案

嗨发布问题,

要解决您的问题,您需要在尝试从中检索属性值之前检查结果是否为null。

你可以检查下面的代码没有什么魔法:

  1. 我压制了Try / Catch,因为没有兴趣去捕捉和重新抛出它。
  2. 我抑制了DefaultIfEmpty,因为string的默认值为null。
  3. 如果为null或者为null,我会为查询结果添加一个cheking。 public object GetMaxReportNo(string OfficeStationCombination = "") { InspectionReport InspectionReport = new InspectionReport(); string VelosiReportNo = ""; var query = uow.InspectionReportRepository.GetQueryable().AsQueryable(); if (query.Any()) { var queryResult = query.Where(x => x.VelosiReportNo.Contains(OfficeStationCombination)) .OrderByDescending(x => x.InspectionReportID) .FirstOrDefault(); if (queryResult != null) VelosiReportNo = queryResult.VelosiReportNo; } return VelosiReportNo; }

以上是关于如果linq查询找不到匹配的记录,则对象引用未设置错误? [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 EF LINQ 查询 if 子句中引发空引用异常

为啥即使创建了对象,django 也找不到与查询匹配的任何对象

如何解决 C# 中 linq 的 lambda 表达式中的对象引用错误?

如果未找到搜索结果,则返回“NULL”对象

VBA Excel 错误对象变量或未设置块变量

模式对象依赖关系:减少无效的文档中提到的指南真的有意义吗?