Rumah >pembangunan bahagian belakang >C++ >Bagaimana Menerjemahkan Dengan Tepat SQL Kompleks Left Join dan Pertanyaan Pengagregatan ke dalam LINQ?

Bagaimana Menerjemahkan Dengan Tepat SQL Kompleks Left Join dan Pertanyaan Pengagregatan ke dalam LINQ?

Barbara Streisand
Barbara Streisandasal
2025-01-08 20:26:51350semak imbas

How to Accurately Translate a Complex SQL Left Join and Aggregation Query into 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn