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!