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

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

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-31 22:16:17559浏览

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

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

LINQ to SQL 允许使用 C# 创建复杂的查询句法。一项常见任务是实现具有多个连接条件的左外连接。

要了解在 JOIN 语句而不是 WHERE 子句中包含连接条件的必要性,请考虑以下 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

这里,即使事实表 (f) 没有对应于某个时期的行,我们仍然希望该时期包含在结果中。将附加连接条件放在 WHERE 子句中会在结果中省略此类句点。

LINQ to SQL 的解决方案涉及使用扩展方法语法。以下代码片段演示了如何操作:

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

通过将连接条件放在 JOIN 语句中,我们确保只有带有满足 otherid = 17 条件的相应事实包含在结果中,同时仍然执行左外连接。这种方法使我们能够在不牺牲左外连接的好处的情况下实现所需的行为。

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

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