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:
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>
<code class="language-csharp">group j2 by p.ParentId into grouped</code>
<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!