Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Melakukan Gabungan Luar Kiri dengan Pelbagai Syarat dalam LINQ ke SQL?

Bagaimana untuk Melakukan Gabungan Luar Kiri dengan Pelbagai Syarat dalam LINQ ke SQL?

Patricia Arquette
Lepaskan: 2025-01-12 09:58:41
asal
422 orang telah melayarinya

How to Perform a Left Outer Join with Multiple Conditions in LINQ to SQL?

LINQ ke SQL: Menguasai Gabungan Luar Kiri dengan Berbilang Kriteria

Menterjemah pertanyaan SQL ke dalam LINQ kepada SQL boleh menjadi rumit, terutamanya dengan gabungan yang kompleks. Artikel ini memfokuskan pada senario biasa: melakukan gabungan luar kiri dengan berbilang syarat.

Cabaran SQL:

Titik permulaan kami ialah pertanyaan SQL yang menggunakan gabungan luar kiri antara jadual 'tempoh' dan 'fakta'. Cantuman menggunakan dua syarat: 'p.id = f.periodid' dan 'f.otherid = 17'. Syarat kedua bertindak sebagai penapis.

Halangan LINQ:

Kaedah

LINQ DefaultIfEmpty() ialah pendekatan biasa untuk sambung luar kiri. Walau bagaimanapun, hanya menambah 'f.otherid = 17' pada klausa where selepas gabungan tidak berfungsi seperti yang diharapkan.

Penyelesaian LINQ yang Berkesan:

Kuncinya ialah menggunakan syarat gabungan kedua sebelum menggunakan DefaultIfEmpty(). Berikut adalah dua kaedah yang cekap:

Kaedah 1: Menggunakan Sintaks Kaedah Sambungan:

<code class="language-csharp">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 fgi.value</code>
Salin selepas log masuk

Kaedah 2: Menggunakan Subkueri:

<code class="language-csharp">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 fgi.value</code>
Salin selepas log masuk

Mengapa Ini Berfungsi:

Perbezaan penting terletak pada penempatan keadaan. Meletakkan 'f.otherid == 17' dalam klausa where selepas DefaultIfEmpty() akan menapis keluar baris dengan 'f' adalah batal (kerana gabungan tidak menemui padanan). Dengan meletakkannya dalam klausa Where() sebelum DefaultIfEmpty(), kami menapis sebelum nilai nol diperkenalkan, memastikan gelagat sambung luar kiri yang betul. Ambil perhatian bahawa kami memilih fgi.value dan bukannya f.value untuk mengendalikan null dengan betul dalam kaedah pertama.

Atas ialah kandungan terperinci Bagaimana untuk Melakukan Gabungan Luar Kiri dengan Pelbagai Syarat dalam LINQ ke SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan