Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ,其中列表变量和列表中的数据可能为空_C#_Linq_Linq To Entities - Fatal编程技术网

C# LINQ,其中列表变量和列表中的数据可能为空

C# LINQ,其中列表变量和列表中的数据可能为空,c#,linq,linq-to-entities,C#,Linq,Linq To Entities,我有一个列表,其中包含所有需要与数据库进行比较的值 from staff in this.unitOfWork.StaffRepository.Data where officeIds.Contains(staff.OfficeId) OfficeID具有int[]类型,并且OfficeID可以为null。如果OfficeID为空,我该怎么办 我试过了 where officeIds != null && officeIds.Contains(staff.OfficeId)

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

from staff in this.unitOfWork.StaffRepository.Data
where officeIds.Contains(staff.OfficeId)
OfficeID具有int[]类型,并且OfficeID可以为null。如果OfficeID为空,我该怎么办

我试过了

where officeIds != null && officeIds.Contains(staff.OfficeId)
但它不起作用。它抛出一个异常

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

其他信息:无法比较类型的元素 “System.Int32[]”。仅原语类型、枚举类型和实体 类型是受支持的


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

OfficeID数组的存在使得LINQtoEntities能够发出一个SQLIn(…,…)操作符,检查它的空值并不是提供者应该做的事情
您最好始终将OfficeID初始化为空数组(OfficeID=new int[]),或者仅在检查空性之后才附加where子句(后一种方法听起来更合理)

这里的要点是我们应该开箱思考,而不是关注如何在
where
语句中检查null

问题陈述:

from staff in this.unitOfWork.StaffRepository.Data
where officeIds.Contains(staff.OfficeId)
在accept
IQueryable
中执行以下
。我们可以从

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 ...

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

OfficeID数组的存在使得LINQtoEntities能够发出一个SQLIn(…,…)操作符,检查它的空值并不是提供者应该做的事情
您最好始终将OfficeID初始化为空数组(OfficeID=new int[]),或者仅在检查空性之后才附加where子句(后一种方法听起来更合理)

这里的要点是我们应该开箱思考,而不是关注如何在
where
语句中检查null

问题陈述:

from staff in this.unitOfWork.StaffRepository.Data
where officeIds.Contains(staff.OfficeId)
在accept
IQueryable
中执行以下
。我们可以从

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 ...

定义“不起作用”。是否有正在抛出的异常?然后请将其包含在question@haim770谢谢,我刚刚编辑过:)我们需要异常详细信息。不是因为存在例外,
OfficeID
数组,这样Linq to实体就能够在(…,…)操作符中发出SQL
,检查它的空值并不是提供者应该做的事情。您最好总是将
officeIds
初始化为空数组(
officeIds=newint[]
),或者仅在检查空性后才附加
where
子句(后一种方法听起来更合理)。定义“不起作用”。是否有正在抛出的异常?然后请将其包含在question@haim770谢谢,我刚刚编辑过:)我们需要异常详细信息。不是因为存在例外,
OfficeID
数组,这样Linq to实体就能够在(…,…)
操作符中发出SQL
,检查它的空值并不是提供者应该做的事情。您最好总是将
officeIds
初始化为空数组(
officeIds=newint[]
),或者仅在检查空性之后才附加
where
子句(后一种方法听起来更合理)。