Rumah >pembangunan bahagian belakang >C++ >Bagaimana Mengira Rekod Kanak-kanak dengan Tepat dalam LINQ Kiri Sertai dengan Kumpulan?

Bagaimana Mengira Rekod Kanak-kanak dengan Tepat dalam LINQ Kiri Sertai dengan Kumpulan?

Barbara Streisand
Barbara Streisandasal
2025-01-08 20:31:55281semak imbas

How to Accurately Count Child Records in a LINQ Left Join with Grouping?

Menguasai LINQ: Kiraan Rekod Kanak-kanak Tepat di Kiri Sertai dengan Pengumpulan

Menterjemah pertanyaan SQL ke dalam LINQ kepada SQL boleh menjadi rumit, terutamanya apabila menangani senario yang kompleks seperti gabungan kiri, kumpulan dan pengiraan rekod yang tepat. Contoh ini menunjukkan cara mengira rekod anak dengan betul dalam gabungan kiri dengan pengumpulan, menangani masalah biasa.

Pertimbangkan pertanyaan SQL ini:

<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>

Terjemahan LINQ yang naif mungkin mengabaikan perincian penting dalam mengendalikan nilai nol:

<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>

Pendekatan ini salah mengira nilai nol. Penyelesaiannya terletak pada mengubah suai kaedah Count() untuk menapis nilai ChildId null:

<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>

Pertanyaan LINQ yang diperhalusi ini hanya mengira nilai bukan nol ChildId dengan tepat, memberikan kiraan rekod anak yang betul untuk setiap ibu bapa. Ingat untuk sentiasa mengambil kira nol apabila bekerja dengan gabungan kiri dan fungsi agregat dalam LINQ ke SQL untuk memastikan integriti data.

Atas ialah kandungan terperinci Bagaimana Mengira Rekod Kanak-kanak dengan Tepat dalam LINQ Kiri Sertai dengan Kumpulan?. 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