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 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>
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!