C# 如何在LINQ中检查数组是否为空?
我在LINQ中有一个where语句:C# 如何在LINQ中检查数组是否为空?,c#,linq,C#,Linq,我在LINQ中有一个where语句: (users != null && users.Contains(x.Appointment.UserId)) 用户是一个int[]。运行此代码时,出现了一个异常: 无法创建“System.Int32[]”类型的空常量值。只有 中支持实体类型、枚举类型或基元类型 这个背景 我该怎么办?我也有类似的问题。假设您从以下内容开始: var filtered = appointments .Where(x => users != nu
(users != null && users.Contains(x.Appointment.UserId))
用户是一个int[]
。运行此代码时,出现了一个异常:
无法创建“System.Int32[]”类型的空常量值。只有
中支持实体类型、枚举类型或基元类型
这个背景
我该怎么办?我也有类似的问题。假设您从以下内容开始:
var filtered = appointments
.Where(x => users != null && users.Contains(x.Appointment.UserId));
正如@CarstenKönig所建议的,尝试将空检查移到Where子句之外:
var filtered = users != null ?
appointments.Where(x => users.Contains(x.Appointment.UserId)) :
appointments;
这意味着空检查由C#处理,LINQ to Entities不会尝试将其转换为SQL。在尝试包含之前,您不需要使用ToList()吗?显示实际代码或演示问题的示例代码您是否将用户复制到局部变量?这是LINQ to SQL或实体框架,对吗?看起来它正在尝试将Where查询转换为SQL,但LINQ提供程序不知道如何处理DB中的int[]。从EF/LINQ上下文中获取空保护(
users!=null
)。。。