Vous commencez par déterminer les éléments qui ne figurent pas encore dans la collection :
var newItems = DownloadedItems.Where(x => !CurrentCollection.Any(y => x.bar == y.bar));
Il suffit ensuite de les ajouter :
foreach(var item in newItems)
{
CurrentCollection.Add(item);
}
Notez que la première opération peut avoir une complexité quadratique si la taille de DownloadedItems
est proche de la taille de CurrentCollection
. Si cela pose des problèmes (mesurez d'abord !), vous pouvez utiliser un HashSet
pour ramener la complexité à un niveau linéaire :
// collect all existing values of the property bar
var existingValues = new HashSet<Foo>(from x in CurrentCollection select x.bar);
// pick items that have a property bar that doesn't exist yet
var newItems = DownloadedItems.Where(x => !existingValues.Contains(x.bar));
// Add them
foreach(var item in newItems)
{
CurrentCollection.Add(item);
}