如何将 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?的主要内容,如果未能解决你的问题,请参考以下文章
如何将带有内连接的 sql 查询转换为 linq lambda 表达式?