Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Melakukan LINQ ke SQL Left Outer Join dengan Penapisan Pelbagai Keadaan?

Bagaimana untuk Melakukan LINQ ke SQL Left Outer Join dengan Penapisan Pelbagai Keadaan?

DDD
DDDasal
2025-01-04 08:48:34895semak imbas

How to Perform a LINQ to SQL Left Outer Join with Multi-Condition Filtering?

LINQ to SQL Left Outer Join with Multi-Condition Filtering

Dalam LINQ to SQL, gabungan luar kiri membenarkan untuk mendapatkan semula semua rekod dari jadual kiri, walaupun tiada rekod yang sepadan dalam jadual kanan. Apabila membuat pertanyaan menggunakan sambung luar kiri, anda mungkin perlu menggunakan syarat penapisan tambahan pada jadual yang digabungkan.

Pertimbangkan pernyataan SQL berikut:

SELECT f.value
FROM period AS p
LEFT OUTER JOIN facts AS f
ON p.id = f.periodid AND f.otherid = 17
WHERE p.companyid = 100

Pertanyaan ini mendapatkan semula nilai daripada jadual "fakta" untuk setiap rekod dalam jadual "tempoh", walaupun tiada rekod padanan dalam jadual "fakta". Selain itu, ia menggunakan penapis lanjut untuk memasukkan hanya rekod yang lajur "otherid" dalam jadual "fakta" adalah sama dengan 17.

Untuk menterjemah pertanyaan ini ke dalam LINQ, langkah berikut boleh diambil:

var query = from p in context.Periods
            join f in context.Facts
            on p.id equals f.periodid
            into fg
            from fgi in fg.Where(f => f.otherid == 17).DefaultIfEmpty()
            where p.companyid == 100
            select f.value;

Perbezaan utama daripada gabungan luar kiri standard terletak pada penggunaan kaedah Where() pada jadual bercantum "fg" sebelum memanggil DefaultIfEmpty(). Ini memastikan syarat penapisan tambahan digunakan sebelum berpotensi mengecualikan sebarang rekod disebabkan hasil gabungan kosong.

Pendekatan alternatif melibatkan penggunaan subkueri:

var query = from p in context.Periods
            join f in context.Facts
            on p.id equals f.periodid
            into fg
            from fgi in (from f in fg
                         where f.otherid == 17
                         select f).DefaultIfEmpty()
            where p.companyid == 100
            select f.value;

Kedua-dua pendekatan ini mencapai hasil yang diingini untuk melakukan sambung luar kiri dengan berbilang syarat sambung. Adalah penting untuk memahami bahawa meletakkan syarat penapisan tambahan dalam klausa WHERE selepas JOIN mungkin tidak menghasilkan gelagat yang diingini, kerana ia boleh mengakibatkan pengecualian rekod yang harus disertakan kerana gabungan luar kiri.

Atas ialah kandungan terperinci Bagaimana untuk Melakukan LINQ ke SQL Left Outer Join dengan Penapisan Pelbagai Keadaan?. 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