Saya memiliki kelas Items
dengan properties (Id, Name, Code, Price)
.
Daftar Items
diisi dengan item duplikat.
Untuk ex .:
1 Item1 IT00001 $100
2 Item2 IT00002 $200
3 Item3 IT00003 $150
1 Item1 IT00001 $100
3 Item3 IT00003 $150
Bagaimana cara menghapus duplikat dalam daftar menggunakan LINQ?
c#
linq
linq-to-objects
generic-list
Prasad
sumber
sumber
var set = new HashSet<int>(); var uniques = items.Where(x => set.Add(x.Id));
. Seharusnya kriminal melakukannya ..Jawaban:
Untuk mencocokkan hanya pada beberapa properti, buat pembanding kesetaraan khusus, misalnya:
Kemudian gunakan seperti ini:
sumber
GroupBy
tidak bisa.XoR
operator^
di C #. Telah digunakan dalam VB.NET viaXor
tetapi harus melakukan double take untuk kode Anda untuk melihat apa itu pada awalnya.1[DataAccess.HR.Dao.CCS_LOCATION_TBL] Distinct[CCS_LOCATION_TBL](System.Linq.IQueryable
1 [DataAccess.HR.Dao.CCS_LOCATION_TBL], System.Collections.Generic.IEqualityComparer`1 [ Metode DataAccess.HR.Dao.CCS_LOCATION_TBL]), dan metode ini tidak dapat diterjemahkan ke dalam ekspresi storesumber
Jika ada sesuatu yang membuang kueri Distinct Anda, Anda mungkin ingin melihat MoreLinq dan menggunakan operator DistinctBy dan pilih objek yang berbeda dengan id.
sumber
Ini adalah bagaimana saya dapat dikelompokkan bersama dengan Linq. Semoga ini bisa membantu.
sumber
FirstOrDefault
sini tidak memberikan manfaat jikaSelect
segera diikutiGroupBy
, karena tidak ada kemungkinan ada kelompok kosong (grup hanya berasal dari konten koleksi)Gunakan
Distinct()
tetapi perlu diingat bahwa ia menggunakan pembanding kesetaraan default untuk membandingkan nilai, jadi jika Anda menginginkan sesuatu yang lebih dari itu, Anda perlu mengimplementasikan pembanding Anda sendiri.Silakan lihat http://msdn.microsoft.com/en-us/library/bb348436.aspx untuk contoh.
sumber
Anda memiliki tiga opsi di sini untuk menghapus item duplikat di Daftar Anda:
Distinct(new DistinctItemComparer())
seperti @Christian Hayter sebutkan.Gunakan
GroupBy
, tetapi harap dicatat bahwaGroupBy
Anda harus mengelompokkan semua kolom karena jika Anda hanya mengelompokkannya,Id
itu tidak selalu menghapus item duplikat. Sebagai contoh, perhatikan contoh berikut:Hasil untuk pengelompokan ini adalah:
Yang salah karena dianggap
{Id = 3, Name = "Item3", Code = "IT00004", Price = 250}
sebagai duplikat. Jadi permintaan yang benar adalah:3.Override
Equal
danGetHashCode
dalam item kelas:Maka Anda dapat menggunakannya seperti ini:
sumber
Metode ekstensi universal:
Contoh penggunaan:
sumber
Coba metode ekstensi ini. Semoga ini bisa membantu.
Pemakaian:
sumber
sumber
Solusi lain, beli tidak bisa dilakukan.
Saya memiliki file XML dengan elemen yang disebut "MEMDES" dengan dua atribut sebagai "GRADE" dan "SPD" untuk merekam informasi modul RAM. Ada banyak item dupelicate di SPD.
Jadi di sini adalah kode yang saya gunakan untuk menghapus item dupelicated:
sumber
Ketika Anda tidak ingin menulis IEqualityComparer, Anda dapat mencoba sesuatu seperti mengikuti.
sumber