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

时间:2016-05-25 10:59:43

标签: c# .net linq visual-studio-2010 linq-to-entities

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

答案 0 :(得分:14)

您需要在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);