首页 > 后端开发 > C++ > 如何在 LINQ to SQL 中实现具有多个条件的左外连接?

如何在 LINQ to SQL 中实现具有多个条件的左外连接?

DDD
发布: 2024-12-31 01:05:09
原创
346 人浏览过

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

在 LINQ to SQL 中实现具有多个联接条件的左外联接

在访问数据涉及使用指定条件联接多个表的情况下,LINQ to SQL 提供了一种有效的手段执行此类操作。本文深入研究了需要具有多个联接条件的左外联接来检索数据的特定场景。

初始查询和挑战

考虑以下 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 表达式。虽然在 LINQ 中有执行左外连接的标准方法(例如,使用 DefaultIfEmpty()),但合并附加连接条件 f.otherid = 17 提出了挑战。

解决方案:放置连接条件在 DefaultIfEmpty()

解决此挑战的关键是在调用之前引入连接条件DefaultIfEmpty()。这可以使用扩展方法语法或子查询来实现:

// Using extension method syntax
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;

// Using a subquery
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;
登录后复制

连接条件放置的说明

AND f.otherid = 17 条件是连接,因为它确保只有事实表中满足此条件的行才会与周期表中的相应行连接。将此条件放在连接后的 WHERE 子句中,将从周期表中排除在事实表中没有匹配行的任何行,即使这些行本来可以满足条件。通过在连接中指定条件,我们保留了所需的行为。

以上是如何在 LINQ to SQL 中实现具有多个条件的左外连接?的详细内容。更多信息请关注PHP中文网其他相关文章!

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