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
Lepaskan: 2025-01-08 20:26:51
asal
346 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan