【问题标题】:Unable to create a constant value of type '?'. Only primitive types or enumeration types are supported in this context无法创建“?”类型的常量值。此上下文仅支持原始类型或枚举类型
【发布时间】:2015-11-17 23:29:42
【问题描述】:

在下面的代码中我遇到了一个异常

var ret = db.Especialidades.Except(sol.EspecialidadesExigidas).ToList();

这是例外

Unable to create a constant value of type 'TCC.Models.Especialidade'. 
Only primitive types or enumeration types are supported in this context.

我研究了其他类似的问题并尝试调整他们的答案,但没有成功。 其他尝试:

var ret = (from e in db.Especialidades where !sol.EspecialidadesExigidas.Any(e2 => e2.Id == e.Id) select e).ToList(); 
var ret = (from e in db.Especialidades where !sol.EspecialidadesExigidas.Select(e2 => e2.Id).Contains(e.Id) select e).ToList();

我要做的是从数据库中获取所有未包含在列表中的“Especialidades”

【问题讨论】:

标签: c# asp.net-mvc


【解决方案1】:

如果使用 id 列表来代替,这样 Linq 提供者将知道如何将其转换为 SQL。

var ids = sol.EspecialidadesExigidas.Select(e => e.Id).ToList();
var ret = db.Especialidades.Where(e => !ids.Contains(e.Id));

【讨论】:

  • 非常感谢,它有效。但是,它有点脏,不得不这样做。应该有一种方法可以做到这一点,而不必采取额外的步骤来获取 Id`s
猜你喜欢
  • 1970-01-01
  • 2013-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多