Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Melakukan LINQ ke SQL Left Outer Join dengan Penapisan Pelbagai Keadaan?
LINQ to SQL Left Outer Join with Multi-Condition Filtering
Dalam LINQ to SQL, gabungan luar kiri membenarkan untuk mendapatkan semula semua rekod dari jadual kiri, walaupun tiada rekod yang sepadan dalam jadual kanan. Apabila membuat pertanyaan menggunakan sambung luar kiri, anda mungkin perlu menggunakan syarat penapisan tambahan pada jadual yang digabungkan.
Pertimbangkan pernyataan 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
Pertanyaan ini mendapatkan semula nilai daripada jadual "fakta" untuk setiap rekod dalam jadual "tempoh", walaupun tiada rekod padanan dalam jadual "fakta". Selain itu, ia menggunakan penapis lanjut untuk memasukkan hanya rekod yang lajur "otherid" dalam jadual "fakta" adalah sama dengan 17.
Untuk menterjemah pertanyaan ini ke dalam LINQ, langkah berikut boleh diambil:
var query = 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;
Perbezaan utama daripada gabungan luar kiri standard terletak pada penggunaan kaedah Where() pada jadual bercantum "fg" sebelum memanggil DefaultIfEmpty(). Ini memastikan syarat penapisan tambahan digunakan sebelum berpotensi mengecualikan sebarang rekod disebabkan hasil gabungan kosong.
Pendekatan alternatif melibatkan penggunaan subkueri:
var query = 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;
Kedua-dua pendekatan ini mencapai hasil yang diingini untuk melakukan sambung luar kiri dengan berbilang syarat sambung. Adalah penting untuk memahami bahawa meletakkan syarat penapisan tambahan dalam klausa WHERE selepas JOIN mungkin tidak menghasilkan gelagat yang diingini, kerana ia boleh mengakibatkan pengecualian rekod yang harus disertakan kerana gabungan luar kiri.
Atas ialah kandungan terperinci Bagaimana untuk Melakukan LINQ ke SQL Left Outer Join dengan Penapisan Pelbagai Keadaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!