Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Melakukan Sambungan Luar Kiri dalam LINQ Menggunakan Kaedah Sambungan?
Gunakan kaedah sambungan LINQ untuk melakukan sambung luar kiri
Caburan luar kiri ialah operasi cantum yang mengembalikan semua baris dalam jadual di sebelah kiri (dipanggil jadual "ibu bapa") dan hanya baris yang sepadan dalam jadual di sebelah kanan (dipanggil jadual "anak"). Jika baris yang sepadan tidak ditemui dalam jadual anak, nilai pulangan untuk baris itu dalam jadual induk adalah batal.
Dalam LINQ, satu cara untuk melakukan cantuman luar kiri ialah menggunakan kaedah Join
, yang mencipta jujukan ditaip tanpa nama yang mengandungi atribut daripada jadual induk dan anak. Walau bagaimanapun, cara yang lebih mudah untuk mencapai hasil yang sama ialah menggunakan kaedah sambungan GroupJoin
dan SelectMany
.
Sintaks gabungan luar kiri menggunakan kaedah sambungan adalah seperti berikut:
<code class="language-csharp">var query = parentTable.GroupJoin( childTable, parentKeySelector, childKeySelector, (parent, child) => new { Parent = parent, Child = child.DefaultIfEmpty() }) .SelectMany( x => x.Child, (x, y) => new { Parent = x.Parent, Child = y });</code>
Dalam sintaks ini:
parentTable
dan childTable
ialah jadual untuk dicantumkan. parentKeySelector
dan childKeySelector
ialah ungkapan lambda yang menentukan kunci yang digunakan untuk menyertai dua jadual. GroupJoin
menggabungkan baris ibu bapa dan anak. DefaultIfEmpty()
memastikan null dikembalikan untuk baris anak yang tidak mempunyai baris induk yang sepadan. SelectMany
meratakan jujukan jenis tanpa nama menjadi satu jujukan, dengan setiap elemen mewakili baris dalam jadual induk dan baris anak yang sepadan (atau batal jika tiada baris anak yang sepadan wujud). Contoh
Pertimbangkan pertanyaan gabungan luar kiri berikut dalam SQL:
<code class="language-sql">SELECT f.*, b.* FROM Foo f LEFT JOIN Bar b ON f.Foo_Id = b.Foo_Id;</code>
Pertanyaan ini boleh dinyatakan menggunakan kaedah sambungan seperti berikut:
<code class="language-csharp">var query = Foo.GroupJoin( Bar, f => f.Foo_Id, b => b.Foo_Id, (f, b) => new { Foo = f, Bar = b.DefaultIfEmpty() }) .SelectMany( x => x.Bar, (f, b) => new { Foo = f.Foo, Bar = b });</code>
Pertanyaan ini akan mengembalikan urutan jenis tanpa nama, di mana setiap jenis mengandungi sifat daripada jadual Foo dan Bar. Jika satu baris dalam jadual Foo tidak mempunyai baris yang sepadan dalam jadual Bar, sifat Bar yang sepadan akan menjadi batal.
Atas ialah kandungan terperinci Bagaimana untuk Melakukan Sambungan Luar Kiri dalam LINQ Menggunakan Kaedah Sambungan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!