C# 如何在LINQ中检查数组是否为空?

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

我在LINQ中有一个where语句:

(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
)。。。