使用实体的多对多关系查询
本文关键字:查询 关系 实体 | 更新日期: 2023-09-27 18:32:45
我正在尝试使用实体框架执行此查询:
SELECT uir.roleid
FROM UsersInRoles uir
WHERE uir.userid = @userid
UsersInRoles 包含:仅roleid
和userid
。
问题是,UsersInRoles
是一个多对多关系表。它根据PK连接我的Roles
和Users
表。实体框架通过删除 UsersInRoles 实体非常奇怪地处理这个问题,我无法理解如何形成查询。
这就是我所拥有的,但它返回 27 行,而它应该只返回 2 行。
var user_roles = admin_db.Roles
.Where(u => u.User.userid == db_userid)
.Select(r => r.roleid).ToList();
说实话,老实说,我什至无法弄清楚它是如何返回 27 的。这么多结果毫无意义。
您可以使用
Any
查找具有给定用户 ID 的任何(至少一个)用户的所有角色:
var user_roles = admin_db.Roles
.Where(r => r.Users.Any(u => u.userid == db_userid))
.Select(r => r.roleid)
.ToList();
或者 - 如果您在User
中有Roles
集合:
var user_roles = admin_db.Users
.Where(u => u.userid == db_userid)
.SelectMany(u => u.Roles.Select(r => r.roleid))
.ToList();