Как сделать левые соединения в 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 ответ:
Ваш Код
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()
Таким образом, он присоединится, используя анонимный Тип