Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya boleh melakukan gabungan luar kiri di Linq tanpa menggunakan klausa `Join-on-Equal-Into`?
c# linq kiri luar bergabung: alternatif untuk join-on-equals-into
boleh mencabar. Walaupun gabungan dalaman mempunyai pelaksanaan langsung, meninggalkan luar gabungan memerlukan strategi yang berbeza. Mari kita meneroka salah tanggapan biasa dan kemudian pendekatan yang betul. join-on-equals-into
Percubaan yang cacat:
Suatu percubaan yang kerap, tetapi tidak betul, pendekatan untuk menggunakan tugasan bersyarat dalam klausa untuk meniru luaran kiri gabungan: select
<code class="language-csharp">// Incorrect approach List<JoinPair> leftFinal = (from l in lefts from r in rights select new JoinPair { LeftId = l.Id, RightId = (l.Key == r.Key) ? r.Id : 0 });</code>Kaedah ini gagal dengan tepat mewakili gabungan luar kiri kerana ia menghasilkan pelbagai entri untuk elemen sebelah kiri dengan pelbagai unsur sebelah kanan yang sepadan, dan ia tidak betul mengendalikan kes-kes di mana tidak ada perlawanan di sebelah kanan untuk diberi elemen sebelah kiri.
kaedah yang betul menggunakan
: DefaultIfEmpty()
Pendekatan yang disyorkan memanfaatkan kaedah
DefaultIfEmpty()
inilah cara untuk melakukan luaran kiri gabungan dengan berkesan:
Kod ini mula -mula melakukan kumpulan gabungan (
<code class="language-csharp">var q = from l in lefts join r in rights on l.Key equals r.Key into ps_jointable from p in ps_jointable.DefaultIfEmpty() select new { LeftId = l.Id, RightId = p?.Id ?? 0 };</code>kemudian memastikan bahawa walaupun
kosong (tiada perlawanan di sebelah kanan), ia masih akan menghasilkan satu elemen, yang membolehkan klausa into ps_jointable
seterusnya memproses setiap elemen sebelah kiri. Pengendali null-conditional (DefaultIfEmpty()
) dan pengendali pengikat null (ps_jointable
) dengan selamat mengendalikan potensi select
nilai ?.
, memberikan 0 sebagai lalai jika tiada perlawanan dijumpai. Ini dengan tepat mencerminkan tingkah laku gabungan luar kiri. ??
Atas ialah kandungan terperinci Bagaimanakah saya boleh melakukan gabungan luar kiri di Linq tanpa menggunakan klausa `Join-on-Equal-Into`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!