ฉันมี SQL ต่อไปนี้ซึ่งฉันพยายามจะแปลเป็น 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
ฉันเห็นการใช้งานโดยทั่วไปของการเข้าร่วมด้านนอกด้านซ้าย (เช่น. into x from y in x.DefaultIfEmpty()
ฯลฯ ) แต่ฉันไม่แน่ใจว่าจะแนะนำเงื่อนไขการเข้าร่วมอื่น ๆ ได้อย่างไร ( AND f.otherid = 17
)
แก้ไข
ทำไมAND f.otherid = 17
ส่วนเงื่อนไขของ JOIN แทนที่จะเป็นในส่วนคำสั่ง WHERE เพราะf
อาจไม่มีอยู่ในบางแถวและฉันยังต้องการให้รวมแถวเหล่านี้ หากเงื่อนไขถูกนำไปใช้ในส่วนคำสั่ง WHERE หลังจากเข้าร่วม - แล้วฉันจะไม่ได้รับพฤติกรรมที่ฉันต้องการ
น่าเสียดายที่นี่:
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
ดูเหมือนว่าจะเทียบเท่ากับสิ่งนี้:
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
ซึ่งไม่ใช่สิ่งที่ฉันตามมา