现在的位置: 首页 > 综合 > 正文

Linq to sql 中如何进行 left join

2013年11月19日 ⁄ 综合 ⁄ 共 599字 ⁄ 字号 评论关闭

  可以用 into 语法,配合 DefaultIfEmpty() 方法加载右侧表中的空值。

  例子:

var query =
from r in db.Roles
join sr in
(
from ss in db.StaffInRoles
where ss.StaffId == staffId
select ss
)
on r.Id equals sr.RoleId
into x
from y in x.DefaultIfEmpty()
select new RoleInfo
{
RoleId = r.Id,
RoleName = r.Name,
IsSet = y != null
};

  注意这里最后可以通过 y != null 来判断右值是否为空。

  这个 Linq to sql 语句生成的对应 SQL 为:

exec sp_executesql N'SELECT [t0].[Id] AS [RoleId], [t0].[Name] AS [RoleName],
(CASE
WHEN [t2].[test] IS NOT NULL THEN 1
ELSE 0
END) AS [IsSet]
FROM [Role] AS [t0]
LEFT OUTER JOIN (
SELECT 1 AS [test], [t1].[StaffId], [t1].[RoleId]
FROM [StaffInRole] AS [t1]
) AS [t2] ON ([t0].[Id] = [t2].[RoleId]) AND ([t2].[StaffId] = @p0)',N'@p0 int',@p0=1
over.

抱歉!评论已关闭.