Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Melakukan Gabungan Kiri, Kumpulan Mengikut, dan Mengira Rekod Anak Bukan Nol menggunakan LINQ?

Bagaimana untuk Melakukan Gabungan Kiri, Kumpulan Mengikut, dan Mengira Rekod Anak Bukan Nol menggunakan LINQ?

Linda Hamilton
Linda Hamiltonasal
2025-01-08 20:01:43597semak imbas

How to Perform a Left Join, Group By, and Count Non-Null Child Records using LINQ?

Gunakan LINQ untuk melaksanakan pengiraan gabungan kiri, pengumpulan dan sub-rekod bukan kosong

Dalam SQL, pertanyaan berikut melakukan cantuman kiri antara dua jadual, ParentTable dan ChildTable dan mengira bilangan rekod anak yang dikaitkan dengan setiap rekod induk:

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

Tukar pertanyaan ini kepada LINQ kepada SQL menggunakan langkah berikut:

  1. Lakukan sambung kiri menggunakan kaedah Join dan DefaultIfEmpty:
<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()</code>
  1. Hasil kumpulan mengikut ID ibu bapa:
<code class="language-csharp">group j2 by p.ParentId into grouped</code>
  1. Kira bilangan rekod anak yang dikaitkan dengan setiap rekod ibu bapa:
<code class="language-csharp">select new { ParentId = grouped.Key, Count = grouped.Count() }</code>

Walau bagaimanapun, kod di atas akan mengembalikan jumlah bilangan rekod anak untuk setiap rekod induk, termasuk nilai nol. Untuk mengira sub-rekod bukan kosong sahaja, ubah suai ungkapan Count seperti berikut:

<code class="language-csharp">select new { ParentId = grouped.Key, Count = grouped.Where(t => t.ChildId != null).Count() }</code>

Ini akan memastikan bahawa hanya rekod kanak-kanak yang ChildId tidak kosong dikira. Pertanyaan LINQ terakhir akan mencerminkan dengan tepat logik pertanyaan SQL dan mengira sub-rekod bukan kosong dengan berkesan.

Atas ialah kandungan terperinci Bagaimana untuk Melakukan Gabungan Kiri, Kumpulan Mengikut, dan Mengira Rekod Anak Bukan Nol menggunakan 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