如何将 SQL 中的多个内部联接转换为 LINQ?

Posted

技术标签:

【中文标题】如何将 SQL 中的多个内部联接转换为 LINQ?【英文标题】:How do I convert multiple inner joins in SQL to LINQ? 【发布时间】:2011-05-06 03:29:05 【问题描述】:

我已经掌握了 LINQ-to-SQL 的基础知识,但我一直在努力让 JOIN 正常工作。我想知道如何将以下内容转换为 LINQ-to-SQL(最好使用方法链接,因为这是我的首选格式)。

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

【问题讨论】:

【参考方案1】:

使用查询语法:

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

使用方法链:

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

【讨论】:

感谢这个非常棒的例子……3.5 年后仍然有用!

以上是关于如何将 SQL 中的多个内部联接转换为 LINQ?的主要内容,如果未能解决你的问题,请参考以下文章

具有内部联接、多个分组依据和最小最大值的 Linq 查询

如何将带有内连接的 sql 查询转换为 linq lambda 表达式?

LINQ to SQL 中的内部联接的语法是啥?

将 Access SQL 内部联接查询转换为 mySQL 查询的问题

Linq中向实体左联接的Sql查询

替代多个SQL自联接来转换表