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

Linq合并两个查询时字符串赋值抛出空引用异常

解决Union合并查询时的空引用异常问题

嘿,我来帮你搞定这个问题~你遇到的空引用异常,核心原因其实很直白:你给第二个查询赋值了null的Department对象,当你后续试图读取它的Name属性时,就相当于从一个不存在的对象里拿东西,自然会抛出异常啦。

下面给你两个实用的解决方案,按需选择:

方案1:直接返回部门名称字段(推荐)

既然最终是要在表格里展示,不如直接把部门名称作为结果集的字段,不用返回整个Department对象。这样第二个查询里直接返回null或者空字符串,既能满足Union对属性一致性的要求,又能避免空对象的问题。

举个LINQ的例子:

// 第一个查询:包含Department的组织,取部门名称
var queryWithDept = from org in Organizations
                    where org.Department != null
                    select new { 
                        OrganizationName = org.Name, 
                        DepartmentName = org.Department.Name 
                    };

// 第二个查询:不含Department的组织,部门名称设为null
var queryWithoutDept = from org in Organizations
                       where org.Department == null
                       select new { 
                           OrganizationName = org.Name, 
                           DepartmentName = (string)null 
                       };

// 合并两个查询
var combinedResult = queryWithDept.Union(queryWithoutDept);

后续表格渲染时,DepartmentName为null就直接显示空值,完全不会触发异常。

方案2:创建空的Department实例(需保留对象时用)

如果业务上必须返回完整的Department对象,那你不能赋值null,而是要创建一个实例化的空Department对象,把它的Name属性设为空字符串或者null:

// 定义一个空的Department实例
var emptyDepartment = new Department { Name = "" };

// 第一个查询:正常取存在的Department
var queryWithDept = from org in Organizations
                    where org.Department != null
                    select new { 
                        OrganizationName = org.Name, 
                        Department = org.Department 
                    };

// 第二个查询:用空实例替代null
var queryWithoutDept = from org in Organizations
                       where org.Department == null
                       select new { 
                           OrganizationName = org.Name, 
                           Department = emptyDepartment 
                       };

var combinedResult = queryWithDept.Union(queryWithoutDept);

这样访问Department.Name时,对象本身是存在的,只是属性值为空,就不会出现空引用异常了。

额外提醒

  • 确保两个查询返回的结果集属性名称、类型完全一致,Union才能正常工作;
  • 如果不需要去重,可以用UnionAll代替Union,性能会更好一些。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:59:58