Как сделать левые соединения в LINQ на нескольких полях в одном соединении


Я пытаюсь сделать этот простой sql-запрос к LINQ. Но это дает мне ошибку.

Вот SQL-запрос, который нужно преобразовать в LINQ

 DECLARE @groupID int
 SET @groupID = 2
 SELECT * 
    FROM dbo.Person p
    LEFT JOIN dbo.PersonGroup pg ON ( p.PersonID = pg.PersonID AND pg.GroupID = @groupID)

Игнорировать @groupID. который будет предоставлен в качестве параметра функции для запроса LINQ.

Вот запрос LINQ, который я пробовал.

from p in Person
 join pg in PersonGroup on new { p.PersonID, groupID } equals new { pg.PersonID, pg.GroupID } into t
 from rt in t.DefaultIfEmpty()

, где groupID задается в качестве параметра функции. И GroupID, и PersonID являются int. Но это дает мне следующую ошибку,

Error   2   The type of one of the expressions in the join clause is incorrect.  Type inference failed in the call to 'GroupJoin'.

Небольшая помощь была бы признательна.

1 5

1 ответ:

Ваш Код

from p in Person
 join pg in PersonGroup on new { p.PersonID, groupID } equals new { pg.PersonID, pg.GroupID } into t
 from rt in t.DefaultIfEmpty()

Измените его на

from p in Person
 join pg in PersonGroup on new { Person = p.PersonID, Group = groupID } equals new { Person = pg.PersonID, Group = pg.GroupID } into t
 from rt in t.DefaultIfEmpty()

Таким образом, он присоединится, используя анонимный Тип