如何通过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')。
答案 0 :(得分:57)
var listOfRoleId = user.Roles.Select(r => r.RoleId);
var roles = db.Roles.Where(r => listOfRoleId.Contains(r.RoleId));
答案 1 :(得分:10)
如果user.Roles是一个int列表,那么这样的东西应该有效:
var roles = db.Roles.Where(r => user.Roles.Contains(r.RoleId));
将其转换为SQL中的“SELECT WHERE IN(x,y,z ...)”。
答案 2 :(得分:0)
您无法将本地列表与远程数据组合在一起,因此数据库中没有任何内容可供读取(在您的客户端上)。
我认为可能会有更好的解决方案来解决你想要做的事情;
您似乎正在尝试获取分配给特定用户的所有角色。如果是这种情况,我会建议一个解决方案,您将当前用户ID传递给数据库并获取分配有INNER JOIN的角色。
根据您的数据库,它可能看起来像这样(如果您通过名为'UserRoles'的表连接具有角色的用户)
var roles = db.UserRoles.Where(x => x.UserID == <insert id>).Select(x => x.Role)
(当然,如果你喜欢直接在数据库中并映射它,你也可以创建一个返回'Role'列表的存储过程。)