根据实体框架中的元素ID获取元素列表

本文关键字:元素 ID 获取 列表 实体 框架 | 更新日期: 2023-09-27 17:50:05

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

我使用代码优先。

我这样做了,它抛出了一个错误:

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

RoleId的类型为int。

错误:

无法创建类型为"SampleMVC.Domain.Role"的常量值。在此上下文中只支持基本类型('如Int32, String和Guid')。

根据实体框架中的元素ID获取元素列表

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

这样的东西应该可以工作,如果用户。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 == <insert id>).Select(x => x.Role)

(当然你也可以创建一个存储过程,返回'Role'的列表,如果你喜欢直接在你的数据库和映射它。)