【问题标题】:How to check if array is not null in LINQ?如何在LINQ中检查数组是否不为空?
【发布时间】:2014-07-30 10:09:37
【问题描述】:

我在 LINQ 中有这个 where 语句:

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

用户是int[]。当我运行这段代码时,我遇到了一个异常:

无法创建类型为“System.Int32[]”的空常量值。仅有的 支持实体类型、枚举类型或原始类型 这个上下文。

我该怎么办?

【问题讨论】:

  • 在尝试包含之前您不需要使用 ToList() 吗?
  • 展示你的真实代码或演示问题的示例代码
  • 您是否将用户复制到局部变量?
  • 这是 LINQ-to-SQL 或实体框架,对吗?看起来它正在尝试将此 Where 查询转换为 SQL,但 LINQ 提供程序不知道如何处理数据库中的 int[]。
  • 从你的 EF/LINQ 上下文中获取 null-guard (users != null) ...

标签: c# linq


【解决方案1】:

我遇到了类似的问题。假设你从这样的事情开始:

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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 2012-07-02
    相关资源
    最近更新 更多