Penyelesaian Masalah LINQ dan Lambda Join/Where Claus Ralat
Contoh ini menunjukkan kesilapan umum apabila menggunakan ekspresi Linq dan Lambda untuk bergabung dan klausa. Mari kita menganalisis pendekatan yang cacat dan kemudian membentangkan penyelesaian yang betul. Where
linq/lambda yang tidak betul bergabung dengan percubaan:
coretan kod berikut menggambarkan pelaksanaan yang salah:
<code class="language-csharp">int id = 1; var query = database.Posts.Join( database.Post_Metas, post => database.Posts.Where(x => x.ID == id), // Incorrect: Should select a single value, not an IQueryable meta => database.Post_Metas.Where(x => x.Post_ID == id), // Incorrect: Should select a single value, not an IQueryable (post, meta) => new { Post = post, Meta = meta } );</code>
dan post
dalam kaedah meta
. Daripada memilih satu nilai (ID) untuk menyertai, ia menggunakan klausa Join
, kembali Where
koleksi. IQueryable
mengharapkan nilai tunggal untuk pemadanan utama. Join
Pendekatan yang betul:
1. Menggunakan sintaks pertanyaan LINQ (lebih mudah dibaca):
Ini selalunya cara yang lebih jelas untuk menyatakan gabungan:
<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>
2. Menggunakan sintaks lambda (lebih ringkas):
Versi ini dengan betul menggunakan
<code class="language-csharp">var id = 1; var query = database.Posts .Join(database.Post_Metas, post => post.ID, // Correct: Selects the ID for joining meta => meta.Post_ID, // Correct: Selects the Post_ID for joining (post, meta) => new { Post = post, Meta = meta }) .Where(postAndMeta => postAndMeta.Post.ID == id); // Filters after the join</code>
sebagai kunci gabungan. Klausa post.ID
digunakan meta.Post_ID
selepas Where
gabungan, menapis hasil berdasarkan . Ini penting untuk penapisan yang betul.
post.ID
Dengan memahami penggunaan kekunci yang betul dan penempatan yang betul dari klausa
Atas ialah kandungan terperinci Bagaimana cara melakukan LINQ dan Lambda dengan betul dan di mana klausa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!