Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk melakukan gabungan luar kiri di Linq tanpa menggunakan klausa `Join-on-Equal-Into`?
Dalam C# linq ke objek, sangat mudah untuk menggunakan klausa "Join-on-Equals-Into" untuk melaksanakan sambungan luaran kiri. Walau bagaimanapun, dalam beberapa kes, menggunakan klausa WHERE mungkin lebih wajar.
Untuk sambungan dalaman, terdapat penyelesaian yang mudah:
Walau bagaimanapun, untuk sambungan luaran kiri, masalahnya ialah bilangan bilangan operasi sebelah kanan tidak dijumpai apabila item yang sepadan tidak dapat dijumpai. Pertimbangkan percubaan berikut:
<code class="language-csharp">List<joinpair> innerFinal = (from l in lefts from r in rights where l.Key == r.Key select new JoinPair { LeftId = l.Id, RightId = r.Id});</code>Kaedah ini mempunyai kelemahan: ia mengasingkan pengiktirafan senyap butang sebelah kiri yang tidak dipadankan, yang boleh menyebabkan kekaburan. Untuk mengatasi masalah ini, kita boleh menggunakan kaedah "DefaultIfEmpty":
<code class="language-csharp">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>Penyelesaian ini menggunakan kaedah "DefaultIfEmpty" untuk memberikan nilai lalai kepada butang kiri yang tidak mematikan untuk memastikan ketepatan hasilnya.
Output Revied ini mengekalkan imej asal dan mengelakkan penulisan semula yang ketara sambil menjelaskan penjelasan semula
Atas ialah kandungan terperinci Bagaimana untuk 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!