Mengekstrak rekod unik berdasarkan sifat tertentu menggunakan linq
Kaedah Linq dengan cekap menghilangkan elemen pendua dari koleksi. Walau bagaimanapun, apabila berurusan dengan objek kompleks (mis., A Distinct()
), secara langsung menggunakan List<T>
pada keseluruhan objek mungkin tidak menghasilkan hasil yang dikehendaki jika anda hanya memerlukan keunikan berdasarkan sifat -sifat tertentu. Artikel ini menunjukkan bagaimana untuk mencapai ini menggunakan Distinct()
dan GroupBy
. Select
memanfaatkan kumpulan untuk keunikan berasaskan harta
Kunci untuk mendapatkan rekod yang berbeza berdasarkan sifat khusus adalah menggunakan kaedah
GroupBy
mari kita ilustrasikan dengan objek
objek mempunyai sifat seperti List<Person>
dan Person
: Id
Name
<code>Person1: Id=1, Name="Test1" Person2: Id=1, Name="Test1" Person3: Id=2, Name="Test2"</code>
Person
Id
di sini,
List<Person> distinctPeople = allPeople .GroupBy(p => p.Id) .Select(g => g.First()) .ToList();
mereka. GroupBy(p => p.Id)
kemudian memilih elemen pertama dari setiap kumpulan, dengan berkesan memberi anda satu objek Person
setiap unik Id
. Select(g => g.First())
Person
Id
Memperluas ke pelbagai sifat
Teknik ini mudah meluas ke pelbagai sifat. Untuk kumpulan oleh kedua -dua dan
:
Id
FavoriteColor
Kumpulan ini
List<Person> distinctPeople = allPeople .GroupBy(p => new { p.Id, p.FavoriteColor }) .Select(g => g.First()) .ToList();
, memastikan keunikan merentasi kedua -dua sifat. Sekali lagi, Person
memilih wakil tunggal dari setiap kumpulan. Id
FavoriteColor
Select(g => g.First())
Pertimbangan penting
Pendekatan ini menganggap pembekal pertanyaan anda boleh mengendalikan kumpulan yang berpotensi kosong. Sekiranya ini tidak dijamin, pertimbangkan untuk menggunakan bukannya
untuk mengendalikan kes tersebut dengan anggun.
FirstOrDefault()
Untuk versi lama Rangka Kerja Entiti (sebelum versi 6), kaedah alternatif mungkin diperlukan. Rujuk Stack Overflow Jawapan untuk Panduan: First()
https://www.php.cn/link/7dd21654ce1c39ec7632d219e8e71f11
Atas ialah kandungan terperinci Bagaimana cara menggunakan kaedah LINQ yang berbeza () pada sifat -sifat tertentu objek kompleks?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!