C # List .RemoveAll () – Comment supprimer un sous-ensemble de la liste?

J’ai un 2 classes feeds_Auto et produit avec plusieurs propriétés correspondantes. Pour ce problème particulier, l’AutoID est le seul champ que je dois utiliser.

J’ai une List avec plusieurs centaines d’entrées uniques . J’ai une petite List avec 10, 20 entrées uniques . Je souhaite maintenant supprimer tous les éléments de la petite liste de la grande liste.

Comment utiliser RemoveAll ({expression lambda}) pour accomplir cela? Tous les exemples que j’ai trouvés dépendent du fait que la liste générique est de type simple (chaînes, entiers, etc.).

 private static int DoInserts(ref List source, ref List target, Guid companyID) { List newProductList = new List(); List dropSourceList = new List(); using (var db = Helpers.GetProdDB()) { foreach (var src in source) { var tgt = target.Where(a => a.alternateProductID == src.AutoID && a.LastFeedUpdate  0) { source.RemoveAll(????); } } } 

Faire cela en boucle n’est pas difficile:

 foreach (var drop in dropSourceList) { source.RemoveAll(a => a.AutoID == drop.AutoID); } 

Pour moi, cela n’a aucun sens de faire une boucle sur un ensemble pour appeler RemoveAll pour un élément à chaque passe.

Vous pouvez utiliser Any pour simplifier

 source.RemoveAll(a => dropSourceList.Any(b => a.AutoID == b.AutoID)); 

Vous pouvez réduire le nombre de boucles en créant d’abord un HashSet d’ID:

 var toRemove = new HashSet(dropSourceList.ConvertAll(a => a.AutoID)); source.RemoveAll(a => toRemove.Contains(a.AutoID));