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
此查询旨在从以下位置检索数据: 'period' 和 'facts' 表,在 'id' 和 'periodid' 列上应用左外连接。此外,它还包括一个进一步的联接条件“f.otherid = 17”,用于过滤结果。
在 LINQ to SQL 中,左外联接的典型实现涉及使用“DefaultIfEmpty()”方法。然而,为了适应额外的连接条件,我们需要修改我们的方法。
以下 LINQ 查询达到了预期的结果:
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
这里,我们在'.Where()' 子句,确保根据 'f.otherid = 筛选 'fg' 分组中的行选择17'.
或者,我们可以利用子查询:
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中文网其他相关文章!