Tôi có SQL sau mà tôi đang cố dịch sang 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
Tôi đã thấy cách triển khai điển hình của phép nối ngoài trái ( into x from y in x.DefaultIfEmpty()
v.v.) nhưng không chắc chắn làm thế nào để đưa ra điều kiện nối khác ( AND f.otherid = 17
)
BIÊN TẬP
Tại sao AND f.otherid = 17
phần điều kiện của THAM GIA thay vì trong mệnh đề WHERE? Bởi vì f
có thể không tồn tại cho một số hàng và tôi vẫn muốn những hàng này được đưa vào. Nếu điều kiện được áp dụng trong mệnh đề WHERE, sau THAM GIA - thì tôi không có hành vi tôi muốn.
Thật không may điều này:
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
dường như tương đương với điều này:
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
đó không phải là những gì tôi đang theo đuổi