Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Melakukan Gabungan Pelbagai Medan dalam Pertanyaan LINQ Tunggal?
Berbilang medan pertanyaan tunggal sertai dalam LINQ
Apabila melakukan operasi gabungan dalam LINQ, anda biasanya perlu menyertai jadual pada berbilang medan pada masa yang sama. Walaupun ada kemungkinan untuk menambah kekangan tambahan pada gabungan menggunakan klausa where
, ini bukan selalu pendekatan yang paling cekap atau boleh dibaca.
Untuk menyertai berbilang medan dalam satu sambungan, jenis tanpa nama boleh digunakan. Sebagai contoh, kod berikut bergabung dengan jadual field1
dan field2
berdasarkan medan entity
dan entity2
:
<code class="language-csharp">var result = from x in entity join y in entity2 on new { x.field1, x.field2 } equals new { y.field1, y.field2 } select new { x, y }; // 选择结果</code>
Dalam contoh ini, jenis tanpa nama new { x.field1, x.field2 }
dan new { y.field1, y.field2 }
digunakan untuk mencipta jenis baharu yang mengandungi hanya medan yang digunakan untuk penyertaan. Jenis nilai ini kemudiannya dibandingkan menggunakan pengendali equals
untuk melaksanakan gabungan. Akhir sekali, pernyataan select new {x, y}
memilih hasil gabungan, yang mengandungi data daripada kedua-dua entity
dan entity2
.
Adalah penting untuk ambil perhatian bahawa medan yang digunakan dalam jenis awanama mestilah serasi, bermakna ia mestilah daripada jenis yang sama dan jika mana-mana medan boleh dibatalkan, ia mestilah boleh dibatalkan. Jika medan tidak serasi, pengecualian akan dilemparkan.
Walaupun pendekatan ini berfungsi untuk equijoin, anda boleh melakukan cantuman yang lebih kompleks dengan menggunakan pembanding kesaksamaan tersuai atau dengan menggunakan klausa cantuman tambahan. Sebagai contoh, kod berikut melaksanakan bukan equijoin pada jadual entity
dan entity2
menggunakan pembanding kesaksamaan tersuai:
<code class="language-csharp">var result = from x in entity join y in entity2 on new { x.field1, x.field2 } equals new { y.field1, y.field2 } into gj from y in gj.DefaultIfEmpty() where y == null || y.field3 == x.field4 select new { x, y }; // 选择结果</code>
Dalam contoh ini, pembanding kesaksamaan tersuai digunakan untuk membandingkan nilai medan field3
dan field4
. Jika nilainya tidak sama, cantuman akan tetap dilakukan, tetapi nilai y
akan menjadi batal.
Dengan mempelajari cara menggunakan jenis tanpa nama dan pembanding kesaksamaan tersuai, anda boleh menggunakan LINQ untuk melakukan pelbagai gabungan, termasuk gabungan pada berbilang medan. Ingat untuk memilih Keputusan Akhir untuk mendapatkan data yang digabungkan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melakukan Gabungan Pelbagai Medan dalam Pertanyaan LINQ Tunggal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!