Linq:方法无法转换为存储表达式。

4

我目前正在尝试通过使用linq来限制哪些用户可以访问哪些组。当我将相关组添加到视图时,遇到了问题。

我一直遇到的错误是:

LINQ to Entities无法识别“System.String GetUserId(System.Security.Principal.IIdentity)”方法,并且该方法不能被转换为存储表达式

这是我的代码:

  var groupUser = db.GroupUsers.Where(u => u.ApplicationUserId == User.Identity.GetUserId()).Select(gr => gr.GroupId);
  pv.GroupList = db.Groups.Where(g => groupUser.Contains(g.Id)).ToList();
  return View(pv);

1
User.Identity.GetUserId()提取到一个变量中。 - Yacoub Massad
1
非常有帮助!谢谢! - Seb
@YacoubMassad - 将其作为答案发布。 - Web Developer
1个回答

22

由于Linq to Entities无法将GetUserId()转换为相应的SQL(当然,GetUserId()也没有SQL替代方法),因此您需要在lambda表达式外调用它:

var userId = User.Identity.GetUserId();
var groupUser = db.GroupUsers.Where(u => u.ApplicationUserId == userId)
                             .Select(gr => gr.GroupId);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接