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

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

Linda Hamilton
Linda Hamilton原创
2025-01-05 12:11:40572浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn