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