2013-05-10 37 views
0

我有follwing EF實體:高級LINQ表達式加入

候選

  1. 用戶(用戶)
  2. CandidateId(GUID)
  3. CandidateNumber(整數)

用戶

  1. 用戶ID(GUID)
  2. 用戶名(GUID)
  3. 角色(設置)
  4. 考生(設置)

角色

  1. 角色ID(GUID )
  2. 角色名(字符串)
  3. 用戶(組)

正如你看到的,每個候選人用戶ID - 這是特定候選人的創造者的外鍵。我需要的是檢索與創建者和與當前用戶具有相同角色的其他用戶相關的所有候選人。

例如,我是當前用戶 - 這是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' 
        ) 
       ) 

謝謝。

+0

如果您先發布SQL查詢,會更容易回答。 – jure 2013-05-10 08:25:15

+0

這裏是我的TSQL:SELECT *考生從 UsersInRoles INNER JOIN 用戶ON UsersInRoles.UserId = Users.UserId INNER JOIN 考生ON Users.UserId = Candidates.UserId INNER JOIN 角色ON UsersInRoles.RoleId = Roles.RoleId 。 \t \t \t \t \t \t WHERE(Roles.RoleId IN(SELECT UsersInRoles.RoleId FROM UsersInRoles WHERE UsersInRoles.UserId = 'C6B9F0EF-7F23-4BB7-A7DB-DA614B389B13')) – user2326167 2013-05-10 08:30:39

回答

0

要開始我想你想要這樣的事情。

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

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

你沒有在所有附圖中的作用(S).. .. – user2326167 2013-05-10 08:35:05