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

本文关键字:高级 linq 表达式 连接 | 更新日期: 2023-09-27 18:12:54

我有以下EF实体:

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

  1. UserId (Guid)
  2. 用户名(Guid)
  3. 角色(集)
  4. 候选人(套)

  1. RoleId (Guid)
  2. Rolename (String)
  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'
                   ) 
               ) 

谢谢。

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

首先,我认为你应该这样做。

var userNames = new [] {"FOO", "BOO"};
var candidates = User.Where(p => userNames.Contains(p.UserName)).Select(p => p.Candidates);