C# 具有多个联接的高级linq表达式

C# 具有多个联接的高级linq表达式,c#,linq-to-entities,C#,Linq To Entities,我有以下EF实体: 候选人 用户用户 候选ID Guid 候选数字整数 使用者 用户标识Guid 用户名Guid 角色集 候选人集 角色 角色ID Guid Rolename串 用户集 正如您所看到的,每个候选对象都有UserId,这是特定候选对象创建者的外键。我需要的是检索与创建者和与当前用户具有相同角色的其他用户相关的所有候选用户 例如,我是当前用户,即FOO,FOO的角色是MY_。 另外,用户BOO与MY_的角色相同。 所以我需要linq查询c,它将检索所有候选对象 由FOO和BOO创建,

我有以下EF实体:

候选人

用户用户 候选ID Guid 候选数字整数 使用者

用户标识Guid 用户名Guid 角色集 候选人集 角色

角色ID Guid Rolename串 用户集 正如您所看到的,每个候选对象都有UserId,这是特定候选对象创建者的外键。我需要的是检索与创建者和与当前用户具有相同角色的其他用户相关的所有候选用户

例如,我是当前用户,即FOO,FOO的角色是MY_。 另外,用户BOO与MY_的角色相同。 所以我需要linq查询c,它将检索所有候选对象 由FOO和BOO创建,并仅由当前用户FOO进行过滤

在TSQL中-实际上非常简单。但在林克…这对我来说要复杂得多

以下是我的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'
                   ) 
               ) 

谢谢。

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

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

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

如果您先发布SQL查询,则更容易回答。以下是我的TSQL:选择候选对象。*来自UsersInRoles上的UsersInRoles内部加入用户UsersInRoles.UserId=Users.UserId内部加入候选对象Users.UserId=Prodidates.UserId内部加入角色ONUsersInRoles.RoleId=Roles.RoleId WHERE Roles.RoleId在UsersInRoles中选择UsersInRoles.RoleId FROM UsersInRoles WHERE UsersInRoles.UserId='C6B9F0EF-7F23-4BB7-A7DB-DA614B389B13'