2015-05-22 31 views
5

Próbuję zrobić to proste zapytanie sql do LINQ. Ale daje mi błąd.Jak zrobić lewe połączenia w LINQ na wielu polach w pojedynczym łączeniu

Oto zapytań SQL, które muszą CONVER do 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) 

Ignoruj ​​@groupID. który będzie dostarczony jako parametr funkcji dla zapytania LINQ.

Oto zapytanie LINQ, co próbowałem.

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() 

Gdzie identyfikator grupy jest dostarczony jako parametr funkcji. Zarówno GroupID, jak i PersonID są int. Ale to daje mi następujący błąd, mała pomoc byłaby doceniona.

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

Odpowiedz

6

Twój kod

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() 

Zmień go

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() 

W ten sposób będzie on dołączyć przy użyciu typu Anonymous

+0

dziękuję. To działa :) –