0

我有以下 EF 实体:

候选人

  1. 用户(用户)
  2. 候选人 ID(指导)
  3. 候选人编号(整数)

用户

  1. 用户 ID(指导)
  2. 用户名(指导)
  3. 角色(套装)
  4. 候选人(套)

角色

  1. 角色 ID (Guid)
  2. 角色名(字符串)
  3. 用户(套)

如您所见,每个候选人都有 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'
                   ) 
               ) 

谢谢你。

4

1 回答 1

0

首先,我想你想要这样的东西。

var userNames = new [] {"FOO", "BOO"};

var candidates = User.Where(p => userNames.Contains(p.UserName)).Select(p => p.Candidates);
于 2013-05-10T08:29:19.043 回答