按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”列表的存储过程。)