LINQ to SQL:使用多个连接条件执行左外连接
LINQ to SQL 允许您使用多个连接条件执行左外连接,从多个表中检索数据,即使右侧表中没有对应的行,也能包含左侧表中的行。
要实现具有多个连接条件的左外连接,您需要首先建立主要的连接条件,这通常是表主键之间的关系。一旦您有了主要的连接,就可以添加额外的连接条件来进一步筛选结果。
您提供的示例 SQL 查询:
<code class="language-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</code>
根据 'companyid' 筛选 'period' 表中的行,并根据 'id' 和 'otherid' 连接条件从 'facts' 表中检索相应的 'value'。
要将此查询转换为 LINQ,您需要使用 Join()
方法和 DefaultIfEmpty()
方法来处理外连接。给定 SQL 查询的正确 LINQ 实现如下:
<code class="language-csharp">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</code>
Where()
子句用于对 otherid
应用附加连接条件。DefaultIfEmpty()
方法确保即使右侧表中没有匹配的行,也能包含左侧表中的行。
或者,您可以使用子查询:
<code class="language-csharp">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</code>
这两种方法都与提供的 SQL 查询产生相同的结果。通过遵循这些步骤,您可以有效地在 LINQ to SQL 中使用多个连接条件执行左外连接。
以上是如何在 LINQ to SQL 中执行具有多个联接条件的左外联接?的详细内容。更多信息请关注PHP中文网其他相关文章!