【发布时间】:2013-05-10 08:18:40
【问题描述】:
我有以下 EF 实体:
候选人
- 用户(用户)
- CandidateId (Guid)
- CandidateNumber(整数)
用户
- 用户 ID(Guid)
- 用户名(Guid)
- 角色(集)
- 候选人(集)
角色
- RoleId (Guid)
- 角色名(字符串)
- 用户(集)
如您所见,每个候选人都有 UserId - 这是特定候选人创建者的外键。我需要的是检索与创建者和与当前用户具有相同角色的其他用户相关的所有候选人。
例如,我是当前用户 - 它是 FOO,而 FOO 是角色 MY_ROLE。 用户 BOO 也具有相同的角色 MY_ROLE。 所以我需要将检索所有候选人的 linq 查询(c#) 由 FOO 和 BOO 创建并仅由 FOO 的当前用户过滤。
在 TSQL 中——其实做起来很简单。但是在 LINQ 中……对我来说要复杂得多。
这是我的 sql:
SELECT Candidates.*
FROM UsersInRoles
INNER JOIN Users ON UsersInRoles.UserId = Users.UserId
INNER JOIN Candidates ON Users.UserId = Candidates.UserId
INNER JOIN Roles ON UsersInRoles.RoleId = Roles.RoleId
WHERE ( Roles.RoleId IN
( SELECT UsersInRoles.RoleId FROM UsersInRoles
WHERE UsersInRoles.UserId = 'C6B9F0EF-7F23-4BB7-A7DB-DA614B389B13'
)
)
谢谢。
【问题讨论】:
-
如果您先发布 SQL 查询会更容易回答。
-
这是我的 TSQL:SELECT Candidates.* FROM UsersInRoles INNER JOIN Users ON UsersInRoles.UserId = Users.UserId INNER JOIN Candidates ON Users.UserId = Candidates.UserId INNER JOIN Roles ON UsersInRoles.RoleId = Roles .RoleId WHERE ( Roles.RoleId IN ( SELECT UsersInRoles.RoleId FROM UsersInRoles WHERE UsersInRoles.UserId = 'C6B9F0EF-7F23-4BB7-A7DB-DA614B389B13' ) )
标签: c# linq-to-entities