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

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

DDD
Lepaskan: 2025-01-08 20:21:56
asal
966 orang telah melayarinya

How to Accurately Count Child Records in a LINQ Left Join and Group By?

LINQ – Petua untuk penyertaan kiri, pengumpulan dan pengiraan tepat

Menukar pertanyaan SQL yang kompleks kepada LINQ kepada SQL kadangkala boleh menjadi rumit. Contoh biasa ialah melakukan gabungan kiri, kumpulan mengikut lajur dan mengira bilangan rekod yang memenuhi syarat tertentu.

Pertimbangkan pertanyaan SQL berikut:

SELECT p.ParentId, COUNT(c.ChildId)
FROM ParentTable p
  LEFT OUTER JOIN ChildTable c ON p.ParentId = c.ChildParentId
GROUP BY p.ParentId
Salin selepas log masuk

Pertanyaan ini mendapatkan semula ParentId dan kiraan ChildId yang sepadan daripada dua jadual, ParentTable dan ChildTable.

Untuk menukar ini kepada LINQ kepada SQL, mula-mula lakukan gabungan kiri:

from p in context.ParentTable
join c in context.ChildTable on p.ParentId equals c.ChildParentId into j1
Salin selepas log masuk

Walau bagaimanapun, bahagian COUNT(c.ChildId) perlu dikendalikan dengan berhati-hati. Tanpa pertimbangan khusus, SQL yang dijana LINQ akan sentiasa mengembalikan COUNT(*), yang mungkin tidak memberikan hasil yang diharapkan.

Untuk mengira dengan tepat hanya nilai ChildId yang sepadan, tambahkan yang berikut selepas klausa into:

from j2 in j1.DefaultIfEmpty()
Salin selepas log masuk

Ini memastikan bahawa jika tiada rekod anak yang sepadan ditemui, nilai nol diberikan kepada j2.

Akhir sekali, lakukan pengumpulan dan pengiraan:

group j2 by p.ParentId into grouped
select new { ParentId = grouped.Key, Count = grouped.Count(t => t.ChildId != null) }
Salin selepas log masuk

Kod ini dikumpulkan mengikut ParentId dan hanya mengira rekod yang ChildIdnya tidak kosong. Hasilnya ialah objek dengan sifat ParentId dan Count, sepadan dengan format pertanyaan SQL asal. Ini memastikan bahawa kami hanya mengira kes di mana sub-rekod wujud, mengelakkan nilai nol yang disebabkan oleh cantuman kiri yang menjejaskan ketepatan keputusan pengiraan.

Atas ialah kandungan terperinci Bagaimana Mengira Rekod Kanak-Kanak dengan Tepat dalam LINQ Kiri Sertai dan Kumpulan Oleh?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan