Entfernen Sie Elemente aus der Liste, die sich in der Eigenschaft mit Linq überschneiden
Ich habe 2 Listen der verschiedenen Objekte (foo
& bar
), die die gleiche Eigenschaft nennen wir es id
.
public List<foo> foo { get; set; }
public List<bar> bar { get; set; }
Möchte ich entfernen Sie alle Objekte aus foo
dass eine id haben, die nicht vorhanden ist bar
Wie kann man das in linq? Ich schaue mir Intersect
RemoveAll
& Join
aber nicht finden können, ein beliebiges Beispiel, wo sich die Listen mit einem anderen Typ.
InformationsquelleAutor der Frage ojhawkins | 2013-10-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie dies:
!bar.Any(y=>y.Id==x.Id)
erhalten, wenn Artikel ist inbar
Sammlung und wenn es nicht es zu entfernen wird es vonfoo
Sammlung.Bessere Lösung mit hashset O(n):
Quelle der zweiten Antwort: https://stackoverflow.com/a/4037674/1714342
EDIT:
als @Carra sagte, die erste Lösung ist gut für die kleinen Listen, und die zweite ist effizienter für große Listen.
InformationsquelleAutor der Antwort wudzik
Nur im Kopf behalten, dass dies ein O(n2) Lösung, es funktioniert nicht sehr gut für große Listen.
InformationsquelleAutor der Antwort Carra