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 对内存中已有的数据执行任何进一步的操作(如选择(。