Rumah >pembangunan bahagian belakang >C++ >Bagaimana Menerjemahkan Dengan Tepat SQL Kompleks Left Join dan Pertanyaan Pengagregatan ke dalam LINQ?
LINQ: Menguasai Gabungan Kompleks dan Pengagregatan
Artikel ini menunjukkan cara untuk menterjemah SQL kompleks LEFT JOIN
dan pertanyaan pengagregatan ke dalam LINQ dengan tepat. Contoh memfokuskan pada senario di mana pengiraan tepat adalah penting, mengelakkan kemasukan nilai nol dalam pengagregatan.
Berikut ialah pertanyaan SQL:
<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 SQL ini mengambil ID ibu bapa dengan cekap dan mengira ID anak mereka yang berkaitan. Terjemahan LINQ langsung perlu mengendalikan LEFT JOIN
, pengelompokan dan pengagregatan dengan betul.
Percubaan LINQ permulaan yang mungkin cacat mungkin kelihatan seperti ini:
<code class="language-csharp">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, Count = grouped.Count() }</code>
Masalah dengan kod ini ialah grouped.Count()
mengira semua elemen dalam kumpulan, termasuk nilai nol yang terhasil daripada LEFT JOIN
. Ini membawa kepada kiraan yang tidak tepat.
Penyelesaian terletak pada memperhalusi pengagregatan:
<code class="language-csharp">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, Count = grouped.Count(t => t.ChildId != null) }</code>
Dengan menggunakan grouped.Count(t => t.ChildId != null)
, kami memastikan bahawa hanya nilai bukan nol ChildId
dikira, mencerminkan gelagat pertanyaan SQL dengan tepat. Pertanyaan LINQ yang disemak ini memberikan hasil yang betul, mengelakkan perangkap mengira null dalam pengagregatan.
Atas ialah kandungan terperinci Bagaimana Menerjemahkan Dengan Tepat SQL Kompleks Left Join dan Pertanyaan Pengagregatan ke dalam LINQ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!