其中列表变量和列表中的数据可能为空
本文关键字:列表 变量 数据 | 更新日期: 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 ...