首页 文章

Linq:方法无法翻译成商店表达式

提问于
浏览
2

我目前正在尝试限制哪些用户可以访问哪些组,并使用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 回答

  • 12

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

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

相关问题