Вы начинаете с поиска элементов, которых еще нет в коллекции:
var newItems = DownloadedItems.Where(x => !CurrentCollection.Any(y => x.bar == y.bar));
И затем просто добавляете их:
foreach(var item in newItems)
{
CurrentCollection.Add(item);
}
Обратите внимание, что первая операция может иметь квадратичную сложность, еслиразмер DownloadedItems
близок к размеру CurrentCollection
.Если это в конечном итоге вызывает проблемы (сначала измерьте!), Вы можете использовать HashSet
, чтобы уменьшить сложность до линейной:
// 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);
}