0

私は次のEFエンティティを持っています:

候補者

  1. ユーザー(ユーザー)
  2. CandidateId (ガイド)
  3. CandidateNumber (整数)

ユーザー

  1. ユーザー ID (ガイド)
  2. ユーザー名 (ガイド)
  3. 役割(セット)
  4. 候補 (セット)

役割

  1. RoleId (ガイド)
  2. 役割名 (文字列)
  3. ユーザー (セット)

ご覧のとおり、各候補には UserId があります。これは、特定の候補の作成者の外部キーです。私が必要とするのは、作成者と、現在のユーザーと同じ役割にある他のユーザーに関連するすべての候補者を取得することです。

たとえば、私は現在のユーザー (FOO) であり、FOO はロール MY_ROLE に属しています。また、ユーザー BOO は同じロール MY_ROLE に属しています。そのため、FOO と BOO によって作成され、現在のユーザーである FOO だけでフィルタリングされたすべての候補を取得する linq クエリ (c#) が必要です。

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 に答える