Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menyertai Berbilang Jadual dengan Cekap Menggunakan Ungkapan Lambda LINQ?

Bagaimana untuk Menyertai Berbilang Jadual dengan Cekap Menggunakan Ungkapan Lambda LINQ?

Linda Hamilton
Linda Hamiltonasal
2025-01-10 11:36:42217semak imbas

How to Efficiently Join Multiple Tables Using LINQ Lambda Expressions?

Gunakan ungkapan LINQ Lambda untuk melakukan cantuman berbilang jadual

Pengenalan

Dalam LINQ, berbilang jadual boleh digabungkan untuk menggabungkan data daripada sumber data yang berbeza. Artikel ini menerangkan cara melakukan cantuman berbilang jadual menggunakan ungkapan lambda dalam LINQ.

Soalan

Anda cuba menyertai tiga jadual: Produk, Kategori dan Kategori Produk. Selepas penggabungan, anda ingin mendapatkan satu kelas yang menggabungkan semua sifat kelas yang berkaitan. Walau bagaimanapun, kod yang anda tulis nampaknya tidak menghasilkan hasil yang diharapkan.

Jawapan

Apabila merantai berbilang sambungan dalam ungkapan lambda LINQ, hasil perantaraan diwakili sebagai jenis tanpa nama. Ini bermakna hasil setiap gabungan akan menjadi jenis tanpa nama baharu yang menggabungkan sifat jadual yang digabungkan.

Untuk mendapatkan satu kelas yang mengandungi semua atribut kelas yang berkaitan, anda perlu menentukan atribut yang ingin anda sertakan dalam hasil akhir. Ini boleh dilakukan menggunakan operator Pilih.

Berikut ialah kod yang diperbetulkan:

<code>var categorizedProducts = product
    .Join(productcategory, p => p.Id, pc => pc.ProdId, (p, pc) => new { p, pc })
    .Join(category, ppc => ppc.pc.CatId, c => c.Id, (ppc, c) => new { ppc, c })
    .Select(m => new { 
        ProdId = m.ppc.p.Id, // 或 m.ppc.pc.ProdId
        CatId = m.c.CatId
        // 其他赋值
    });</code>

Dalam kod ini, kami mula-mula melakukan cantuman antara tiga jadual dan menyimpan hasilnya dalam jenis tanpa nama perantaraan. Kami kemudian menggunakan operator Pilih untuk menayangkan hasil akhir ke dalam jenis tanpa nama baharu yang merangkumi sifat yang diperlukan (ProdId dan CatId).

Anda boleh memudahkan lagi kod anda dengan menggunakan sintaks pertanyaan dan bukannya ungkapan lambda:

<code>var categorizedProducts =
    from p in product
    join pc in productcategory on p.Id equals pc.ProdId
    join c in category on pc.CatId equals c.Id
    select new {
        ProdId = p.Id, // 或 pc.ProdId
        CatId = c.CatId
        // 其他赋值
    };</code>

Sintaks pertanyaan lebih mudah dibaca dan lebih mudah difahami, terutamanya dalam pertanyaan kompleks yang melibatkan berbilang gabungan.

Atas ialah kandungan terperinci Bagaimana untuk Menyertai Berbilang Jadual dengan Cekap Menggunakan Ungkapan Lambda LINQ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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