Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Melakukan Gabungan Pelbagai Medan dalam Pertanyaan LINQ Tunggal?

Bagaimanakah Saya Boleh Melakukan Gabungan Pelbagai Medan dalam Pertanyaan LINQ Tunggal?

Susan Sarandon
Lepaskan: 2025-01-24 02:22:09
asal
385 orang telah melayarinya

How Can I Perform a Multi-Field Join in a Single LINQ Query?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan