Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Melaksanakan Gabungan Luar Kiri dengan Pelbagai Syarat dalam LINQ ke SQL?

Bagaimana untuk Melaksanakan Gabungan Luar Kiri dengan Pelbagai Syarat dalam LINQ ke SQL?

DDD
DDDasal
2024-12-31 01:05:09346semak imbas

How to Implement a Left Outer Join with Multiple Conditions in LINQ to SQL?

Melaksanakan Left Outer Join dengan Pelbagai Syarat Sertai dalam LINQ to SQL

Dalam situasi di mana mengakses data melibatkan penggabungan berbilang jadual dengan syarat yang ditetapkan, LINQ to SQL menyediakan cara yang berkesan untuk melakukan operasi sedemikian. Artikel ini menyelidiki senario tertentu di mana gabungan luar kiri dengan berbilang syarat gabungan diperlukan untuk mendapatkan semula data.

Pertanyaan dan Cabaran Awal

Pertimbangkan pertanyaan SQL berikut:

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

Tugasnya ialah menterjemah pertanyaan ini ke dalam ungkapan LINQ. Walaupun terdapat kaedah standard untuk melaksanakan sambung luar kiri dalam LINQ (cth., menggunakan DefaultIfEmpty()), memasukkan syarat sambung tambahan f.otherid = 17 memberikan cabaran.

Penyelesaian: Meletakkan Keadaan Sertaan Sebelum DefaultIfEmpty()

Kunci untuk menangani cabaran ini ialah memperkenalkan syarat bergabung sebelum menggunakan DefaultIfEmpty(). Ini boleh dicapai menggunakan sama ada sintaks kaedah sambungan atau subkueri:

// Using extension method syntax
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;

// Using a subquery
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;

Penjelasan Peletakan Keadaan Sertai

Syarat DAN f.otherid = 17 adalah sebahagian daripada cantuman kerana ia memastikan bahawa hanya baris daripada jadual fakta yang memenuhi syarat ini digabungkan dengan baris yang sepadan daripada jadual noktah. Meletakkan syarat ini dalam klausa WHERE selepas gabungan akan mengecualikan mana-mana baris daripada jadual noktah yang tidak mempunyai baris yang sepadan dalam jadual fakta, walaupun jika baris tersebut akan memenuhi syarat tersebut. Dengan menyatakan syarat dalam gabungan, kami mengekalkan tingkah laku yang diingini.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Gabungan Luar Kiri dengan Pelbagai Syarat dalam LINQ ke SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn