Gunakan pertanyaan LINQ untuk menapis item dalam senarai
LINQ menyediakan cara yang cekap untuk menapis item dalam senarai berdasarkan sama ada item itu wujud dalam senarai lain. Sila lihat contoh kod di bawah:
class Program { static void Main(string[] args) { // 示例数据 List<Person> peopleList1 = new List<Person>() { new Person() { ID = 1 }, new Person() { ID = 2 }, new Person() { ID = 3 } }; List<Person> peopleList2 = new List<Person>() { new Person() { ID = 1 }, new Person() { ID = 2 }, new Person() { ID = 3 }, new Person() { ID = 4 }, new Person() { ID = 5 } }; } } class Person { public int ID { get; set; } }
Kita perlu mencari item dalam peopleList2 yang tiada dalam peopleList1. Ini boleh dicapai melalui LINQ.
Gunakan kaedah Except()
LINQ menyediakan kaedah Except()
, yang mengembalikan semua elemen dalam senarai pertama yang tiada dalam senarai kedua. Kita boleh menggunakannya seperti berikut:
var result = peopleList2.Except(peopleList1);
Ini akan mengembalikan koleksi yang mengandungi orang dengan ID 4 dan 5.
Gunakan sintaks pertanyaan LINQ
LINQ juga membenarkan kami melakukan operasi penapisan menggunakan sintaks pertanyaan. Berikut ialah satu cara untuk mencapai hasil yang sama menggunakan sintaks pertanyaan:
var result = from p in peopleList2 where !peopleList1.Any(p2 => p2.ID == p.ID) select p;
Pertanyaan ini menghasilkan hasil yang sama seperti kaedah Except()
.
Penerangan Prestasi:
Perlu diambil perhatian bahawa kerumitan masa kedua-dua kaedah ialah O(n*m), dengan n dan m ialah saiz kedua-dua senarai yang dibandingkan. Ini bermakna apabila saiz senarai bertambah, masa yang diperlukan untuk operasi penapisan meningkat dengan ketara. Untuk set data yang besar, kaedah lain mungkin perlu diterokai untuk mengoptimumkan prestasi.
Atas ialah kandungan terperinci Bagaimanakah LINQ Boleh Menapis Item dengan Cekap dalam Satu Senarai Berdasarkan Kehadiran Item dalam Senarai Lain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!