LINQ comparer deux listes et de les supprimer
J'ai deux listes. Je veux enlever tous les éléments de la liste 1 qui ne sont PAS présents dans la liste 2.
Ainsi, par exemple:
var list1 = new List<DownloadTask>();
list1.Add(new DownloadTask{ OperationID = 1, MachineID = 1 });
list1.Add(new DownloadTask{ OperationID = 2, MachineID = 1 });
list1.Add(new DownloadTask{ OperationID = 3, MachineID = 1 });
list1.Add(new DownloadTask{ OperationID = 3, MachineID = 2 });
var list2 = new List<DownloadTask>();
list2.Add(new DownloadTask{ OperationID = 1, MachineID = 1 });
list2.Add(new DownloadTask{ OperationID = 3, MachineID = 2 });
Après exécution list1
doit contenir uniquement les articles: avec la combinaison operationId = 1
, machineId = 1
ET OperationId = 3
, MachineId =2
.
En d'autres termes, vous voulez connaître l'ensemble des éléments communs à ces deux listes.
OriginalL'auteur ShaneKm | 2013-01-07
Vous devez vous connecter pour publier un commentaire.
Ne
DownloadTask
remplacerEquals
etGetHashCode
correctement? Si oui, vous aurez besoin de:Que si vous êtes heureux de créer une nouvelle liste, bien sûr. Si vous voulez vraiment supprimer de la liste existante, c'est un peu plus difficile. Il serait tout à fait possible de la plus simple à travailler ce que le résultat devrait ressembler à ça, puis d'effacer et de rajouter:
Bien sûr, tout cela ne vous obliger à mettre en œuvre l'égalité de manière appropriée dans
DownloadTask
- mais si vous ne l'avez pas déjà fait, il semble que ça serait une bonne idée de le faire. (Ou au moins de mettre en œuvreIEqualityComparer<DownloadTask>
quelque chose quelque part, vous pouvez passer un comparateur deIntersect
.)Comme une note de côté, je l'ai vue "ne garder que les éléments de la
list1
qui sont aussi danslist2
" (c'est à dire l'intersection) comme une simple façon de regarder le problème que "supprimer tous les éléments delist1
qui ne sont pas danslist2
" - ce dernier est en fait un double négatif, ce qui est toujours un peu de douleur.OriginalL'auteur Jon Skeet
Je pense qu'il devrait être:
OriginalL'auteur ShaneKm
S'il vous plaît essayez cela, il doit être travaillé.
OriginalL'auteur Pranav1688