Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menerjemahkan Subqueries IN SQL ke dalam LINQ kepada SQL?

Bagaimana untuk Menerjemahkan Subqueries IN SQL ke dalam LINQ kepada SQL?

Linda Hamilton
Linda Hamiltonasal
2024-12-28 18:39:14463semak imbas

How to Translate SQL's IN Subqueries into LINQ to SQL?

Mengendalikan IN Sub-Pertanyaan dengan LINQ ke SQL

Dalam LINQ ke SQL, anda mungkin menghadapi keperluan untuk mengendalikan IN sub-pertanyaan, operasi biasa dalam SQL. Mari kita pertimbangkan senario:

Soalan:

Bagaimanakah kita boleh menterjemahkan pertanyaan SQL berikut ke dalam LINQ kepada SQL?

SELECT f.*
FROM Foo f
WHERE f.FooId IN (
    SELECT fb.FooId
    FROM FooBar fb
    WHERE fb.BarId = 1000
)

Jawapan:

Untuk melaksanakan pertanyaan sedemikian dalam LINQ kepada SQL, kita perlu menggunakan dua konsep:

1. Sub-pertanyaan sebagai Koleksi Kunci:

Kami mulakan dengan mentakrifkan sub-pertanyaan sebagai koleksi kunci yang memenuhi syarat dalam klausa IN.

var fooBarIds = from fb in context.FooBar
                where fb.BarId == 1000
                select fb.FooId;

2. Pertanyaan dengan Kaedah Mengandungi:

Seterusnya, kita boleh menggunakan kaedah Mengandungi pada koleksi kunci untuk menyemak sama ada FooId yang diberikan ada.

var result = from f in context.Foo
             where fooBarIds.Contains(f.FooId)
             select f;

Pertanyaan ini akan mengembalikan semua baris daripada jadual Foo di mana FooId wujud dalam koleksi FooId yang diambil daripada sub-pertanyaan.

Kes Penggunaan Lanjutan:

Prinsip yang sama boleh digunakan untuk melaksanakan operasi sub-pertanyaan lain, seperti EXISTS:

// EXISTS
var q = from t1 in table1
        let t2s = from t2 in table2
                  where <Conditions for table2>
                  select t2.KeyField
        where t2s.Any(t1.KeyField)
        select t1;

Atas ialah kandungan terperinci Bagaimana untuk Menerjemahkan Subqueries IN SQL ke dalam LINQ kepada SQL?. 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