Distinct im Entity-Framework

7

Ich habe eine Liste von Objekten, von denen einige die gleichen IDs haben, also möchte ich diese Elemente entfernen, die dupliziert werden.

Ich habe es mit so etwas versucht:

%Vor%

Aber es funktioniert nicht!

Also habe ich diese Methode geschrieben, um die Duplikate zu vermeiden:

%Vor%

Irgendwelche Ideen, wie man die Leistung verbessert?

Danke im Voraus.

    
Javito Hertfy 16.12.2011, 15:13
quelle

3 Antworten

26

Das ist schön und einfach:

%Vor%

Aber wenn du es richtig schreiben willst, rate ich dir, es so zu schreiben:

%Vor%

Es wird Ihnen mehr Freiheit geben, wenn es um zusätzliche Vergleiche geht. Nachdem Sie diese Klasse geschrieben haben, können Sie sie wie folgt verwenden:

%Vor%     
Piotr Justyna 16.12.2011, 15:19
quelle
5

Ich denke, dass das Schreiben eines eigenen benutzerdefinierten Vergleichs ein guter Ansatz ist.

Hier ist ein Artikel in msdn, der das Thema sehr gut erklärt: Ссылка

Der Grund, dass Distinct nicht funktioniert, dass Distinct () keine Ahnung davon hat, wie man bestimmen kann, ob es Gleichheitszeichen gibt, also benutzt es die Referenz, um zu bestimmen, dass es dasselbe "Objekt" ist. Es funktioniert, als ob es funktioniert. Alle Klassen in der Abfrage sind nicht das gleiche Objekt.

Indem Sie Ihren eigenen Vergleicher schreiben (es ist einfach), können Sie Distinct () sagen, wie man die Vergleiche durchführt, um festzustellen, ob sie gleich sind.

Bearbeiten : Wenn Distinct nicht verwendet wird, ist das kein Problem und die Situation ist nicht freuent, die erste Antwort von Piotr Justyna ist einfach und effektiv.

    
Jonathan 16.12.2011 15:18
quelle
1

anstelle von .First (), versuchen Sie .FirstOrDefault ()

    
Brian 16.12.2011 15:15
quelle