首页 > 后端开发 > C++ > 如何使用多个联接条件执行 LINQ to SQL 左外联接?

如何使用多个联接条件执行 LINQ to SQL 左外联接?

Linda Hamilton
发布: 2025-01-05 12:11:40
原创
596 人浏览过

How to Perform a LINQ to SQL Left Outer Join with Multiple Join Conditions?

LINQ to SQL:具有多个联接条件的左外联接

在 LINQ to SQL 中,将涉及具有多个联接的左外联接的 SQL 查询转换为条件可能具有挑战性。本文解决了需要将具有左外连接和附加连接条件的 SQL 查询转换为 LINQ 的场景。

SQL 查询

SELECT f.value
FROM period as p 
LEFT OUTER JOIN facts AS f ON p.id = f.periodid AND f.otherid = 17
WHERE p.companyid = 100
登录后复制

LINQ 翻译
使用 DefaultIfEmpty() 的左外连接的典型 LINQ 实现非常简单,但合并附加连接条件需要仔细考虑。

以下初始尝试虽然语法正确,但不会产生所需的结果:

from p in context.Periods
join f in context.Facts on p.id equals f.periodid into fg
from fgi in fg.DefaultIfEmpty()
where p.companyid == 100 && fgi.otherid == 17
select f.value
登录后复制

为了实现所需的行为,附加连接调用 DefaultIfEmpty() 之前必须引入条件。这是使用扩展方法语法或子查询来完成的:

扩展方法语法

from p in context.Periods
join f in context.Facts on p.id equals f.periodid into fg
from fgi in fg.Where(f => f.otherid == 17).DefaultIfEmpty()
where p.companyid == 100
select f.value
登录后复制

子查询

from p in context.Periods
join f in context.Facts on p.id equals f.periodid into fg
from fgi in (from f in fg
             where f.otherid == 17
             select f).DefaultIfEmpty()
where p.companyid == 100
select f.value
登录后复制

以上是如何使用多个联接条件执行 LINQ to SQL 左外联接?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板