Mam zajęcia Items
z properties (Id, Name, Code, Price)
.
Lista Items
jest wypełniona zduplikowanymi elementami.
Na przykład:
1 Item1 IT00001 $100
2 Item2 IT00002 $200
3 Item3 IT00003 $150
1 Item1 IT00001 $100
3 Item3 IT00003 $150
Jak usunąć duplikaty z listy za pomocą linq?
c#
linq
linq-to-objects
generic-list
Prasad
źródło
źródło
var set = new HashSet<int>(); var uniques = items.Where(x => set.Add(x.Id));
. To powinno być kryminalne.Odpowiedzi:
Aby dopasować tylko niektóre właściwości, utwórz niestandardowy moduł porównujący równość, np .:
Następnie użyj tego w następujący sposób:
źródło
GroupBy
czego nie można.XoR
operatora^
w C #. Używał w VB.NET za pośrednictwem,Xor
ale musiał zrobić podwójne podejście do kodu, aby zobaczyć, co to było na początku.1[DataAccess.HR.Dao.CCS_LOCATION_TBL] Distinct[CCS_LOCATION_TBL](System.Linq.IQueryable
1 [DataAccess.HR. taj.CCS_LOCATION_TBL ], System.Collections.Generic.IEqualityComparer`1 [ DataAccess.HR.resent.CCS_LOCATION_TBL]) ”, a tej metody nie można przetłumaczyć na wyrażenie sklepu.źródło
Jeśli jest coś, co odrzuca zapytanie Distinct, możesz spojrzeć na MoreLinq i użyć operatora DistinctBy i wybrać odrębne obiekty według identyfikatora.
źródło
W ten sposób mogłem grupować się z Linq. Mam nadzieję, że to pomoże.
źródło
FirstOrDefault
tutaj nie przynosi korzyści, jeśliSelect
nastąpi natychmiastGroupBy
, ponieważ nie ma możliwości, aby istniała pusta grupa (grupy zostały wyprowadzone z zawartości kolekcji)Użyj,
Distinct()
ale pamiętaj, że używa domyślnego modułu porównującego do porównywania wartości, więc jeśli chcesz czegoś poza tym, musisz wdrożyć własny moduł porównujący.Proszę zobaczyć http://msdn.microsoft.com/en-us/library/bb348436.aspx dla przykładu.
źródło
Masz tutaj trzy możliwości usunięcia zduplikowanego elementu z listy:
Distinct(new DistinctItemComparer())
jak wspomniano w @Christian Hayter .Użyj
GroupBy
, ale pamiętaj,GroupBy
że powinieneś pogrupować według wszystkich kolumn, ponieważ jeśli tylko pogrupujesz wedługId
, nie zawsze usunie zduplikowane elementy. Na przykład rozważ następujący przykład:Wynik dla tego grupowania będzie następujący:
Co jest nieprawidłowe, ponieważ uważa się je za
{Id = 3, Name = "Item3", Code = "IT00004", Price = 250}
duplikat. Prawidłowe zapytanie to:3. Zastąpienie
Equal
iwGetHashCode
klasie przedmiotów:Następnie możesz użyć tego w następujący sposób:
źródło
Uniwersalna metoda rozszerzenia:
Przykład użycia:
źródło
Wypróbuj tę metodę rozszerzenia. Mam nadzieję, że to może pomóc.
Stosowanie:
źródło
źródło
Kolejne obejście, nie piękny zakup wykonalny.
Mam plik XML z elementem o nazwie „MEMDES” z dwoma atrybutami „GRADE” i „SPD” do rejestrowania informacji o module pamięci RAM. W SPD jest wiele duplikatów.
Oto kod, którego używam do usuwania duplikatów:
źródło
Jeśli nie chcesz pisać IEqualityComparer, możesz spróbować czegoś takiego.
źródło