Tôi có SQL sau đây, mà tôi đang cố gắng để dịch để LINQ:LINQ to SQL - Left Outer Join với nhiều điều kiện tham gia
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 việc thực hiện đặc trưng của trái bên ngoài tham gia (ví dụ. into x from y in x.DefaultIfEmpty()
vv), nhưng không chắc chắn làm thế nào để giới thiệu người kia điều kiện join (AND f.otherid = 17
)
EDIT
Tại sao là phần AND f.otherid = 17
điều kiện JOIN thay vì trong mệnh đề WHERE? Vì f
có thể không tồn tại đối với một số hàng và tôi vẫn muốn các hàng này được bao gồm. Nếu điều kiện được áp dụng trong mệnh đề WHERE, sau JOIN - thì tôi không nhận được hành vi mà tôi muốn.
Thật không may 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
có vẻ là 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
mà không phải là khá gì tôi sau đó.
Ngọt ngào!Tôi đã tìm kiếm điều này một thời gian nhưng không chắc chắn làm thế nào để tìm kiếm điều này. Không chắc chắn cách thêm thẻ vào câu trả lời này. Dưới đây là các tiêu chuẩn tìm kiếm tôi đã sử dụng: LINQ to sql filter tham gia hoặc từ LINQ to sql where khoản tham gia hoặc từ – Solburn