You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Asp.Net Core 6多条件查询DatabaseContext时遇空引用错误求助

问题描述

本人使用Asp.Net Core 6、C#开发应用,以下单条件查询代码执行无问题:

var vName = DatabaseContext.Venue.FirstOrDefault(m => m.Name == viewModel.Name).Name;

以下多条件查询代码执行也无问题:

var vcEmail = DatabaseContext.VenueContact.FirstOrDefault(
        m => m.VenueId == viewModel.Id &&
             m.ContactEmail == viewModel.ContactEmail);

但执行如下多条件查询代码时,出现错误**“Object reference not set to an instance of an object”**:

var vcName = DatabaseContext.VenueContact.FirstOrDefault(
        m => m.VenueId == viewModel.Id &&
             m.Display == vcDisplay).Display;

已知vcDisplay为有效值,Display字段存在于数据表/模型中,viewModel.Id也有效(已在之前语句中使用)。错误码:_HResult=-2147467261,_COMPlusExceptionCode=-532462766。

请问如何排查该错误?是否多条件查询无法直接返回字段值?

问题排查与解决
  • 错误本质:FirstOrDefault在没有匹配到任何数据时会返回null,此时直接访问.Display就会触发空引用异常。你之前的查询没报错,只是刚好都查到了数据,和是否多条件无关。
  • 排查步骤:
    1. 拆分查询和字段访问:先单独执行查询,通过调试查看结果是否为null:
      var venueContact = DatabaseContext.VenueContact.FirstOrDefault(
          m => m.VenueId == viewModel.Id &&
               m.Display == vcDisplay);
      
      如果venueContact是null,说明数据库里没有符合这两个条件的记录。
    2. 核对条件匹配细节:检查vcDisplay与Display字段的类型、格式是否完全一致,比如字符串是否区分大小写、是否有多余空格,数值类型是否精度匹配,这些都可能导致查不到数据。
    3. 直接在数据库验证:执行对应SQL语句,确认是否存在目标记录:
      SELECT * FROM VenueContact WHERE VenueId = @Id AND Display = @vcDisplay;
      
  • 解决办法:
    1. 先判空再访问字段:
      var venueContact = DatabaseContext.VenueContact.FirstOrDefault(
          m => m.VenueId == viewModel.Id &&
               m.Display == vcDisplay);
      var vcName = venueContact?.Display; // 使用空安全运算符避免空引用
      
    2. 若预期必须有数据,改用First:查不到时会抛出明确的异常,方便定位问题:
      var vcName = DatabaseContext.VenueContact.First(
          m => m.VenueId == viewModel.Id &&
               m.Display == vcDisplay).Display;
      
    3. 用空合并运算符设置默认值:
      var vcName = DatabaseContext.VenueContact.FirstOrDefault(
          m => m.VenueId == viewModel.Id &&
               m.Display == vcDisplay)?.Display ?? string.Empty;
      

内容的提问来源于stack exchange,提问作者Nestor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 19:23:10