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

本文关键字:LINQ 是否 数组 何检查 检查 | 更新日期: 2023-09-27 18:15:48

我在LINQ中有这个where语句:

(users != null && users.Contains(x.Appointment.UserId))

users是一个int[]。当我运行这段代码时,我有一个异常:

无法创建类型为'System.Int32[]'的空常数值。只有中支持实体类型、枚举类型或基本类型此上下文。

我该怎么办?

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

我也遇到过类似的问题。假设您从这样的内容开始:

var filtered = appointments
    .Where(x => users != null && users.Contains(x.Appointment.UserId));

正如@CarstenKönig所建议的,尝试将null检查移到Where子句之外:

var filtered = users != null ? 
    appointments.Where(x => users.Contains(x.Appointment.UserId)) :
    appointments;

这意味着null检查是由c#处理的,LINQ to Entities不会尝试将其转换为SQL。

正如其他人建议的那样,您可以将bool检查移到闭包之外,并在Where语句中使用结果bool:

var usersNotNull = users != null;
var users = users == null ? new string[0] : users;
query.Where(x => usersNotNull && users.Contains(x.Appointment.UserId));