Je suppose qu’il y a une simple requête LINQ pour ce faire, je ne sais pas exactement comment. Consultez l’extrait de code ci-dessous, le commentaire explique ce que je voudrais faire :
Réponses
Trop de publicités?Si vous remplacez l'égalité des Personnes, alors vous pouvez aussi utiliser:
peopleList2.Except(peopleList1)
Except
devrait être nettement plus rapide que l' Where(...Any)
variante car il peut mettre le deuxième de liste dans une table de hachage. Where(...Any)
a un temps d'exécution de l' O(peopleList1.Count * peopleList2.Count)
tandis que les variantes basées sur HashSet<T>
(ou presque) ont un temps d'exécution de O(peopleList1.Count + peopleList2.Count)
.
Except
implicitement supprime les doublons. Cela ne devrait pas affecter votre cas, mais il pourrait être un problème pour des cas similaires.
Ou si vous le souhaitez code rapide, mais ne veulent pas pour remplacer l'égalité:
var excludedIDs = new HashSet<int>(peopleList1.Select(p => p.ID));
var result = peopleList2.Where(p => !excludedIDs.Contains(p.ID));
Cette variante ne permet pas de supprimer les doublons.
Étant donné que toutes les solutions à ce jour utilisée couramment syntaxe, voici une solution dans la syntaxe d’expression de requête, pour ceux qui s’intéressent :
Je pense que c’est assez différent des réponses données à être intéressant pour certains, même pensé il plus probable serait pas optimale pour les listes. Maintenant pour les tables avec IDs indexées, ce serait certainement la voie à suivre.