
Perbandingan Sertai dan Sertai Kumpulan dalam LINQ dengan Entiti
Memahami GroupJoin
GroupJoin, seperti Sertai, ialah kaedah LINQ untuk menggabungkan berbilang sumber data. Walau bagaimanapun, GroupJoin menghasilkan hasil dengan struktur yang berbeza daripada Sertai.
Sertai:
- Lakukan cantuman dalaman dan hanya jana baris yang terdapat padanan dalam kedua-dua jadual yang digabungkan.
- Keputusan: Jadual bercantum yang mengandungi lajur daripada kedua-dua jadual.
Sertai Kumpulan:
- Lakukan cantuman luar untuk memadankan baris dalam jadual pertama dengan baris dalam jadual kedua.
- Keputusan: Koleksi kumpulan, di mana setiap kumpulan mengandungi baris daripada jadual pertama dan baris padanannya daripada jadual kedua (atau senarai kosong jika tiada padanan).
Tatabahasa
Sintaks pertanyaan:
Sertai:
<code>from p in Parent
join c in Child on p.Id equals c.Id
select new { p.Value, c.ChildValue }</code>
Salin selepas log masuk
Sertai Kumpulan:
<code>from p in Parent
join c in Child on p.Id equals c.Id into g
select new { Parent = p, Children = g }</code>
Salin selepas log masuk
Sintaks kaedah (kurang biasa digunakan):
Sertai:
<code>Parent.Join(Child, p => p.Id, c => c.Id, (p, c) => new { p.Value, c.ChildValue })</code>
Salin selepas log masuk
Sertai Kumpulan:
<code>Parent.GroupJoin(Child, p => p.Id, c => c.Id, (p, c) => new { Parent = p, Children = c })</code>
Salin selepas log masuk
Kes penggunaan
1. Hasilkan sambungan luar yang rata:
- GroupJoin boleh digunakan untuk mencipta gabungan luar yang diratakan yang mengandungi setiap baris dalam jadual pertama, walaupun tiada baris yang sepadan dalam jadual kedua. Ini dicapai dengan meratakan kumpulan:
<code>from p in Parent
join c in Child on p.Id equals c.Id into g
from c in g.DefaultIfEmpty()
select new { Parent = p.Value, Child = c?.ChildValue }</code>
Salin selepas log masuk
2. Simpan pesanan:
- Sertai boleh digunakan untuk menapis senarai sambil mengekalkan susunan elemen. Dengan menggunakan jujukan luaran sebagai senarai pertama, anda boleh mengekalkan susunan elemen daripada senarai kedua:
<code>from id in ids
join p in parents on id equals p.Id
select p</code>
Salin selepas log masuk
Atas ialah kandungan terperinci Apakah Perbezaan Antara Kaedah Join dan GroupJoin LINQ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!