Tengo el siguiente SQL, que estoy tratando de traducir a LINQ:
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
He visto la implementación típica de la unión externa izquierda (es decir, into x from y in x.DefaultIfEmpty()
etc.) pero no estoy seguro de cómo introducir la otra condición de unión ( AND f.otherid = 17
)
EDITAR
¿Por qué la AND f.otherid = 17
condición es parte de JOIN en lugar de en la cláusula WHERE? Porque f
puede no existir para algunas filas y todavía quiero que se incluyan estas filas. Si la condición se aplica en la cláusula WHERE, después de JOIN, no obtengo el comportamiento que quiero.
Lamentablemente esto:
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
parece ser equivalente a esto:
SELECT f.value
FROM period as p
LEFT OUTER JOIN facts AS f ON p.id = f.periodid
WHERE p.companyid = 100 AND f.otherid = 17
que no es exactamente lo que busco.