按entity framework中的ID获取元素列表

如何通过ID获取另一个列表中的所有元素? 例如; 我有List角色; 我想通过他们的ID获取此列表中数据库中的所有角色。

我正在使用代码优先。

我做了这个,它扔了一个错误:

var roles = db.Roles.Where(r => user.Roles.Any(ur => ur.RoleId == r.RoleId)); 

RoleId的类型为int。

错误:

无法创建“SampleMVC.Domain.Role”类型的常量值。 在此上下文中仅支持基本类型(例如Int32,String和Guid’)。

 var listOfRoleId = user.Roles.Select(r => r.RoleId); var roles = db.Roles.Where(r => listOfRoleId.Contains(r.RoleId)); 

如果user.Roles是一个int列表,那么这样的东西应该有效:

 var roles = db.Roles.Where(r => user.Roles.Contains(r.RoleId)); 

这将它变成SQL中的“SELECT WHERE IN(x,y,z …)”。

您无法将本地列表与远程数据组合在一起,因此数据库中没有任何内容可供读取(在您的客户端上)。

我认为可能有更好的解决方案,你正在尝试做什么;

您似乎正在尝试获取分配给特定用户的所有角色。 如果是这种情况,我会建议一个解决方案,您将当前用户ID传递给数据库并获取分配有INNER JOIN的角色。

根据您的数据库,它可能看起来像这样(如果您通过名为’UserRoles’的表连接具有角色的用户)

 var roles = db.UserRoles.Where(x => x.UserID == ).Select(x => x.Role) 

(当然,如果您想直接在数据库中进行映射,也可以创建一个返回“Role”列表的存储过程。)