在 linq 查询中使用局部变量时无法创建类型 '<Some type>' 的常量值,但使用硬编码值



LINQ 抛出的完整错误是:

无法创建类型的常量值 "Apple.Models.ADMIN_USER_ROLES"。仅基元类型或枚举 此上下文支持类型。

生成错误的代码(在 EF 4 上(如下所示。

var userID = 1;
List<ADMIN_ROLE> roles = db.ADMIN_ROLES.Where(r => 
                         db.ADMIN_USER_ROLES.Any(ur => 
                              ur.ID_USER == userID && ur.ID_ROLE == r.ID)).ToList();

此错误不会在 LINQPad 或我的另一个 (EF 5( 项目中发生。

在查询中硬编码值 1 而不是 userID 也不会显示任何错误。

项目是从另一台 PC 复制的,它在那里工作。 重构将 linq 拆分为两个查询是可行的,但我不能这样做。

有谁知道是什么原因造成的,所以我避免任何重构。

更新 1:这只发生在嵌套查询中,否则它有效。见马赫亚尔的回答。

如果你坚持要研究IQueryables,你可以使用下面的LINQ

var userRoles = db.ADMIN_USER_ROLES.Where(ur => ur.ID_USER == userID);
var rols = (from r in db.ADMIN_ROLES
where (from ur in userRoles select ur.ID_ROLE).Contains(r.ID)
select r).ToList();

最有可能通过添加ToList.AsEnumerable()方法来解决您的问题,如下所示:

db.ADMIN_ROLES.ToList().Where

或:

db.ADMIN_USER_ROLES.ToList()

加载数据后.ToList(),将使用 Linq to Object 对内存中已有的数据执行任何进一步的操作(如选择(。

最新更新