具有多个连接的高级linq表达式

时间:2013-05-10 08:18:41

标签: c# linq-to-entities

我有以下EF实体:

候选人

  1. 用户(用户)
  2. CandidateId(Guid)
  3. CandidateNumber(整数)
  4. 用户

    1. UserId(Guid)
    2. UserName(Guid)
    3. 角色(套装)
    4. 候选人(套装)
    5. 角色

      1. RoleId(Guid)
      2. Rolename(String)
      3. 用户(设置)
      4. 如您所见,每个候选人都有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'
                           ) 
                       ) 
        

        谢谢。

1 个答案:

答案 0 :(得分:0)

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

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

var candidates = User.Where(p => userNames.Contains(p.UserName)).Select(p => p.Candidates);