Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Melaksanakan Gabungan Luar Kiri dengan Pelbagai Syarat dalam LINQ ke 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!