您的位置:首页 > 数据库

Linq to sql 中如何进行 left join

2011-11-23 11:22 239 查看



可以用 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: