2010-11-06 13 views
58

Ich habe die Grundlagen von LINQ-to-SQL heruntergefahren, aber ich habe Probleme damit, JOINs richtig funktionieren zu lassen. Ich würde gerne wissen, wie man das Folgende in LINQ-zu-SQL konvertiert (idealerweise mit Methodenverkettung, da dies mein bevorzugtes Format ist).Wie konvertiere ich mehrere innere Joins in SQL zu LINQ?

SELECT  c.CompanyId, c.CompanyName, 
      p.FirstName + ' ' + p.LastName as AccountCoordinator, 
      p2.FirstName + ' ' + p2.LastName as AccountManager 
FROM  dbo.Companies c 
INNER JOIN dbo.Persons p 
ON   c.AccountCoordinatorPersonId = p.PersonId 
INNER JOIN dbo.Persons p2 
ON   c.AccountManagerPersonId = p2.PersonId 

Antwort

132

Mit Abfragesyntax:

from c in dbo.Companies 
join p in dbo.Persons on c.AccountCoordinatorPersonId equals p.PersonId 
join p2 in dbo.Persons on c.AccountManagerPersonId equals p2.PersonId 
select new 
{ 
    c.CompanyId, 
    c.CompanyName, 
    AccountCoordinator = p.FirstName + ' ' + p.Surname, 
    AccountManager = p2.FirstName + ' ' + p2.Surname 
} 

Methode Verkettungs Verwendung:

dbo.Companies.Join(dbo.Persons, 
        c => c.AccountCoordinatorPersonId, 
        p => p.PersonId, 
        (c, p) => new 
        { 
         Company = c, 
         AccountCoordinator = p.FirstName + ' ' + p.Surname 
        }) 
      .Join(dbo.Persons, 
        c => c.Company.AccountManagerPersonId, 
        p2 => p2.PersonId, 
        (c, p2) => new 
        { 
         c.Company.CompanyId, 
         c.Company.CompanyName, 
         c.AccountCoordinator, 
         AccountManager = p2.FirstName + ' ' + p2.Surname 
        }); 
+5

Vielen Dank für die extrem genial Beispiel ... später noch 3,5 Jahre nützlich! –