其中列表变量和列表中的数据可能为空

本文关键字:列表 变量 数据 | 更新日期: 2023-09-27 18:18:08

我有一个列表包含所有需要与数据库进行比较的值

from staff in this.unitOfWork.StaffRepository.Data
where officeIds.Contains(staff.OfficeId)

officeIds为int[]类型,officeIds可以为空。如果officeIds为空,我该怎么办?

我试着

where officeIds != null && officeIds.Contains(staff.OfficeId)

但是它不起作用。它抛出一个异常

类型为'System '的异常。在EntityFramework.SqlServer.dll中发生NotSupportedException',但未在用户代码中处理

附加信息:不能比较类型的元素"System.Int32[]"。只有基本类型、枚举类型和实体支持的类型

其中列表变量和列表中的数据可能为空

感谢haim770的建议,以下是他的评论:

officeIds数组在那里,以便Linq到实体将能够发出SQL IN(…),…)操作符,检查其为空并不是提供者应该做的事情。
您最好始终将officeIds初始化为空数组(officeIds = new int[]),或者仅在检查null之后才附加where子句(后一种方法对我来说听起来更明智)

这里的重点是我们应该跳出框框,而不是专注于如何检查where语句中的null。

问题语句:

from staff in this.unitOfWork.StaffRepository.Data
where officeIds.Contains(staff.OfficeId)

下面的in接受IQueryable。我们可以从from外检查

var query = this.unitOfWork.StaffRepository.Data
if(list != null && list.Count > 0)
    query = query.Where("condition")
from staff in query
where *continue other conditions*
select ...