使用实体的多对多关系查询

时间:2013-09-25 20:22:13

标签: c# entity-framework

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

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

UsersInRoles仅包含:roleiduserid

问题是,UsersInRoles是多对多关系表。它根据PK来连接我的RolesUsers表。实体框架通过删除UsersInRoles实体来解决这个问题,并且我无法理解如何构成查询。

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

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

说实话,老实说,我甚至无法弄清楚它是如何回归的。这个数字的结果毫无意义。

1 个答案:

答案 0 :(得分: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();