Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menukar Pertanyaan SQL Kompleks dengan Gabungan Berbilang, Kiraan dan Gabungan Kiri ke LINQ?

Bagaimana untuk Menukar Pertanyaan SQL Kompleks dengan Gabungan Berbilang, Kiraan dan Gabungan Kiri ke LINQ?

Barbara Streisand
Barbara Streisandasal
2025-01-25 04:43:09729semak imbas

How to Convert a Complex SQL Query with Multiple Joins, Counts, and Left Joins into LINQ?

Tukar pertanyaan SQL kompleks yang mengandungi pelbagai sambungan, mengira dan sambungan kiri ke LINQ

Bagaimana untuk menukar pertanyaan SQL kompleks yang mengandungi pelbagai sambungan dan agregat ke dalam pertanyaan LINQ yang setara. Pertanyaan mengambil data dari tiga jadual (Table_C, Table_v, dan Table_R) dan melakukan operasi kedalaman lajur tertentu.

Tukar SQL ke LINQ Permintaan Pemahaman:

Politicon Query:

Tukar pertanyaan kepada pemboleh ubah perisytiharan berasingan. Dalam contoh ini, Table_R menggunakan jenis ID dan pengiraan tanpa nama.
  1. Kelas sambungan: Gunakan atribut navigasi atau objek tanpa nama untuk menyambung, dan gunakan dan
  2. untuk mensimulasikan gabungan kiri.
  3. GroupBy: Gunakan jenis tanpa nama untuk mengumpulkan hasil pelbagai lajur. Gunakan untuk mengira keputusan agregasi. into DefaultIfEmpty() Pilih:
  4. Pilih lajur yang diperlukan dengan membuat jenis tanpa nama dengan medan yang ditentukan.
  5. Berikut adalah kod LINQ yang ditulis oleh sintaks ekspresi siasatan: Distinct()
  6. Berikut adalah bersamaan dengan kod LINQ bersamaan yang ditulis oleh sintaks ekspresi lambda:
  7. Perhatikan bahawa proses

dalam versi ekspresi lambda telah menambah

pengendali keadaan kosong untuk memproses
<code class="language-csharp">var subrq = from r in Table_R
            group r by r.Id into rg
            select new { Id = rg.Key, cnt = rg.Count() };

var ansq = (from c in Table_C
            join v in Table_V on c.Id equals v.Id
            join r in subrq on c.Id equals r.Id into rj
            from r in rj.DefaultIfEmpty()
            where c.IdUser == "1234"
            group new { c, v, r } by new { c.Id, c.Title, r.cnt } into cvrg
            select new {
                cvrg.Key.Title,
                Nb_V2 = cvrg.Count(),
                Nb_V1 = cvrg.Select(cvr => cvr.v.IdUser).Distinct().Count(),
                Nb_R = (int?)cvrg.Key.cnt
            }).Distinct();</code>
mungkin null, mengelakkan keabnormalan NullReferenceException. Kedua -dua kaedah boleh mencapai fungsi yang sama, dan kaedah yang dipilih bergantung kepada keutamaan peribadi.

Atas ialah kandungan terperinci Bagaimana untuk Menukar Pertanyaan SQL Kompleks dengan Gabungan Berbilang, Kiraan dan Gabungan Kiri ke 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