Suppression d'une liste d'objets à partir d'une autre liste
J'ai été à la recherche de quelque chose comme ça pendant des jours. Je suis en train de supprimer tous les éléments d'une plus grande liste d'Une fonction à une liste B.
Supposons que j'ai une liste générale avec 100 éléments avec différents IDENTIFIANTS et j'ai une autre liste avec des éléments spécifiques à seulement 10 dossiers. J'ai besoin de supprimer tous les éléments de la première liste qui n'existe pas à l'intérieur de la deuxième liste.
Je vais essayer de montrer le code que je ne sais pas comment cela n'a pas fonctionne.
List<Obj> listA = new List<Obj>();
List<Obj> listB = new List<Obj>();
//here I load my first list with many elements
//here I load my second list with some specific elements
listA.RemoveAll(x => !listB.Contains(x));
Je ne sais pas pourquoi, mais ça ne fonctionne pas. Si j'essaie de cet exemple avec un List<int>
type, il fonctionne très bien, mais j'aimerais le faire avec mon objet. Cet objet a obtenu un ID mais je ne sais pas comment utiliser ce code à l'intérieur de l'LINQ phrase.
avez-vous remplacer Égale/GetHashcode sur votre Obj type à utiliser le champ ID au lieu de la méthode héritée de Système.L'objet?
Mon objets a reçu le même type, mais un contenu différent, n'avait qu'à comparer la carte d'identité et pas de l'ensemble de l'objet. Simplement suivi IAbstract~ réponse et a travaillé comme un charme... Merci, les gars !
OriginalL'auteur Dan-SP | 2011-10-03
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de comparer les Id:
Liste(T).RemoveAll
qu'est-ce que l'espace de noms pour RemoveAll méthode d'extension ? Je ne l'ai pas .
Arash, il fait partie de la Liste. Je serais prêt à parier que vous aurez besoin de faire appel .ToList() sur votre IEnumerable
OriginalL'auteur Joe
Je crois que vous pouvez utiliser le Sauf Extension pour ce faire.
Référence: http://www.dotnetperls.com/except
OriginalL'auteur aevanko
Si vous souhaitez supprimer une liste d'objets (
listB
) à partir d'une autre liste (listA
) utilisation:N'oubliez pas d'utiliser ToList() pour convertir
IEnumerable<Obj>
àList<Obj>
.OriginalL'auteur romanoza
Selon la documentation MSDN ( http://msdn.microsoft.com/en-us/library/bhkz42b3.aspx ), contient utilise la valeur par défaut comparateur d'Égalité pour déterminer l'égalité, de sorte que vous pouvez utiliser IEquatable de la méthode Equals sur votre Obj classe pour le faire fonctionner. HiperiX mentionne la ref comparaison ci-dessus.
Comment ajouter de la IEquateable interface: http://msdn.microsoft.com/en-us/library/ms131190.aspx
OriginalL'auteur deepee1