Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah saya dapat menyertai dua jadual menggunakan ekspresi Linq dan Lambda?

Bagaimanakah saya dapat menyertai dua jadual menggunakan ekspresi Linq dan Lambda?

DDD
Lepaskan: 2025-01-28 16:26:12
asal
690 orang telah melayarinya

How Can I Efficiently Join Two Tables Using LINQ and Lambda Expressions?

Menguasai Linq dan Lambda Bergabung: Panduan Praktikal

Cabaran umum bagi pemaju yang bekerja dengan Ekspresi Linq dan Lambda dengan cekap menyertai dua jadual. Ini sering membawa kepada kesilapan. Mari kita periksa contoh yang bermasalah dan meneroka penyelesaian yang berkesan.

pertanyaan LINQ berikut, semasa cuba bergabung, mengandungi kesilapan:

<code class="language-csharp">int id = 1;
var query = database.Posts.Join(
    database.Post_Metas,
    post => database.Posts.Where(x => x.ID == id),
    meta => database.Post_Metas.Where(x => x.Post_ID == id),
    (post, meta) => new { Post = post, Meta = meta }
);</code>
Salin selepas log masuk
Isu terletak pada pemilih

dan post dalam kaedah meta. Pemilih ini harus secara langsung merujuk kunci utama dan asing, tidak melaksanakan pertanyaan tambahan. Join

penyelesaian 1: sintaks pertanyaan linq (lebih mudah dibaca)

Untuk kejelasan yang lebih baik, terutamanya untuk pemula, sintaks pertanyaan LINQ menawarkan pendekatan yang lebih intuitif:

<code class="language-csharp">var id = 1;
var query =
   from post in database.Posts
   join meta in database.Post_Metas on post.ID equals meta.Post_ID
   where post.ID == id
   select new { Post = post, Meta = meta };</code>
Salin selepas log masuk
Pendekatan ini jelas menunjukkan keadaan gabungan () dan penapisan ().

post.ID equals meta.Post_ID where post.ID == id Penyelesaian 2: Ekspresi Lambda (kaedah lanjutan)

Jika anda lebih suka kesimpulan ekspresi lambda, inilah versi yang diperbetulkan menggunakan kaedah lanjutan:

Kod halus ini secara langsung menggunakan sifat

dan
<code class="language-csharp">var id = 1;
var query = database.Posts   // Start with the "from" table
   .Join(database.Post_Metas, // Join with the "join" table
      post => post.ID,        // Primary key for "from" table
      meta => meta.Post_ID,   // Foreign key for "join" table
      (post, meta) => new { Post = post, Meta = meta }) // Selection
   .Where(postAndMeta => postAndMeta.Post.ID == id);    // "Where" clause</code>
Salin selepas log masuk
untuk menyertai, menjadikannya cekap dan bebas ralat. Klausa

kemudian menapis hasilnya berdasarkan ID yang dikehendaki. Pendekatan ini lebih cekap kerana ia melakukan penapisan Post_ID selepas Where menyertai, mengurangkan operasi pangkalan data yang tidak perlu. id Dengan memahami kaedah yang lebih baik ini, anda boleh menulis pertanyaan LINQ yang lebih bersih, lebih cekap, dan bebas ralat untuk menyertai jadual menggunakan kedua-dua sintaks pertanyaan dan ekspresi lambda.

Atas ialah kandungan terperinci Bagaimanakah saya dapat menyertai dua jadual menggunakan ekspresi Linq dan Lambda?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan