0

我正在尝试使用实体框架执行此查询:

SELECT uir.roleid
FROM UsersInRoles uir
WHERE uir.userid = @userid

UsersInRoles 包含:roleiduserid仅。

问题是,UsersInRoles是一个多对多的关系表。Roles它根据我的和Users表的 PK连接我的表和表。实体框架通过删除 UsersInRoles 实体非常奇怪地处理了这个问题,我无法理解如何形成查询。

这就是我所拥有的,但是当它应该只返回 2 行时它返回了 27 行。

 var user_roles = admin_db.Roles
                    .Where(u => u.User.userid == db_userid)
                    .Select(r => r.roleid).ToList();

说实话,老实说,我什至无法弄清楚它是如何返回 27 的。这样的结果数量毫无意义。

4

1 回答 1

2

您可以使用Any来查找具有任何(至少一个)具有给定用户 ID 的用户的所有角色:

var user_roles = admin_db.Roles
    .Where(r => r.Users.Any(u => u.userid == db_userid))
    .Select(r => r.roleid)
    .ToList();

或者 - 如果你有一个Roles集合User

var user_roles = admin_db.Users
    .Where(u => u.userid == db_userid)
    .SelectMany(u => u.Roles.Select(r => r.roleid))
    .ToList();
于 2013-09-25T21:23:09.760 回答