2010-11-06 15 views
58

LINQ-to-SQL'in temellerini aştım, ancak JOIN'lerin düzgün çalışması için çabalamaya çalışıyorum. Aşağıdakileri LINQ-to-SQL'e nasıl dönüştürdüğümü bilmek istiyorum (ideal olarak tercih edilen format olan yöntem zincirlemeyi kullanarak).SQL'de birden çok iç bağlantıyı LINQ'a nasıl dönüştürebilirim?

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 

cevap

132

sorgu sözdizimi kullanarak:

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 
} 

yöntem zincirleme kullanma:

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

Teşekkür derece müthiş örneğin ... hala yararlı 3.5 yıl sonra! –