LINQ ke SQL: Meninggalkan Sertai, Kumpulan Mengikut dan Kira
Contoh ini menunjukkan cara melakukan operasi gabungan kiri, kumpulan mengikut dan kiraan menggunakan LINQ ke SQL, mencerminkan kefungsian pertanyaan SQL tertentu.
Pertanyaan SQL:
Pertanyaan SQL berikut berfungsi sebagai sasaran kami untuk terjemahan LINQ:
<code class="language-sql">SELECT p.ParentId, COUNT(c.ChildId) FROM ParentTable p LEFT OUTER JOIN ChildTable c ON p.ParentId = c.ChildParentId GROUP BY p.ParentId</code>
Pertanyaan ini menyertai ParentTable
dan ChildTable
, mengira rekod anak untuk setiap ibu bapa dan mengendalikan kes di mana ibu bapa tidak mempunyai anak (menggunakan LEFT OUTER JOIN
).
Setara LINQ kepada SQL:
Pertanyaan LINQ yang setara dengan SQL menggunakan klausa join
, DefaultIfEmpty()
untuk gelagat gabungan kiri, group by
dan kaedah Count()
dengan predikat untuk mengira hanya ID anak bukan nol:
<code class="language-csharp">var query = from p in context.ParentTable join c in context.ChildTable on p.ParentId equals c.ChildParentId into j1 from j2 in j1.DefaultIfEmpty() group j2 by p.ParentId into grouped select new { ParentId = grouped.Key, ChildCount = grouped.Count(t => t.ChildId != null) };</code>
Pertanyaan LINQ ini mencapai hasil yang sama seperti pertanyaan SQL. Gabungan into j1
dan from j2 in j1.DefaultIfEmpty()
melaksanakan cantuman luar kiri dengan betul. Klausa group by
mengumpulkan hasil dengan ParentId
, dan kaedah Count()
, menggunakan syarat (t => t.ChildId != null
), memastikan bahawa hanya rekod anak sedia ada dikira. Jenis tanpa nama new { ParentId, ChildCount }
mencipta set hasil akhir.
Ini dengan jelas dan ringkas menterjemahkan logik pertanyaan SQL ke dalam ungkapan LINQ yang boleh dibaca dan diselenggara.
Atas ialah kandungan terperinci Bagaimana untuk Melakukan Gabungan Kiri, Kumpulan Mengikut, dan Kira dengan LINQ ke SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!