我遇到了IQueryable到string []转换的问题。
public string[] GetRolesForUser(User user)
{
if (!UserExists(user))
throw new ArgumentException(MissingUser);
var qry = from x in entities.Roles
where x.Users.Contains(user)
select x.RoleName;
return qry.ToArray(); // At this point I've got a NotSupportedException
}
异常消息:
无法创建“SchoolMS.Models.Entities.User”类型的常量值。在此上下文中仅支持原始类型(例如Int32,String和Guid')。
请帮助,我该如何解决这个问题?什么是正确的方法?
(我正在使用带有mvc3的EF 4.1)
答案 0 :(得分:1)
我怀疑问题是实体框架无法为查询中的user
变量创建常量。一种解决方案可能是手动创建连接而不是使用Contains
:
var qry = from x in entities.Roles
join Users u on u.RoleId = x.Id
where u.Id = user.Id
select x.RoleName
答案 1 :(得分:0)
我会考虑写
var qry = from x in entities.Roles
where x.Users.Select(u => u.Id).Contains(user.Id)
select x.RoleName;
因此,根据要求,它将是一种原始类型。
答案 2 :(得分:0)
问题解决了。
我在我的用户和角色(UsersInRoles表提供它)之间使用了多对多的关系,这就是为什么我的查询不适合这个
我在我的方法中更改了查询,它工作正常..
public string[] GetRolesForUser(User user)
{
if (!UserExists(user))
throw new ArgumentException(MissingUser);
var qry = entities.Users
.Where(u => u.UserID == user.UserID)
.SelectMany(x => x.Roles.Select(r => r.RoleName));
return qry.ToArray();
}