如何检查数组在LINQ中是否为空
本文关键字:LINQ 是否 数组 何检查 检查 | 更新日期: 2023-09-27 18:15:48
我在LINQ中有这个where语句:
(users != null && users.Contains(x.Appointment.UserId))
users是一个int[]
。当我运行这段代码时,我有一个异常:
无法创建类型为'System.Int32[]'的空常数值。只有中支持实体类型、枚举类型或基本类型此上下文。
我该怎么办?
我也遇到过类似的问题。假设您从这样的内容开始:
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));