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>
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>
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>
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!