Я знаю, что должен вызвать ToList () в IList, чтобы получить доступ к методу AddRange ()
Это на самом деле небезопасно.Это создаст новый List<T>
, поэтому вы не добавите элементы в ваш исходный IList<T>
.Вам нужно будет добавлять их по одному за раз.
Самый простой вариант - просто зацикливание и использование содержимого:
var itemsToAdd = enumerablePrices.Where(p => !SelectedPrices.Any(sel => sel.ID == p.ID));
foreach(var item in itemsToAdd)
{
SelectedPrices.Add(item);
}
Однако это будет квадратичный характер,так что если коллекции очень большие, это может быть медленно.В зависимости от того, насколько велики коллекции, на самом деле может быть лучше заранее создать набор идентификаторов:
var existing = new HashSet<int>(SelectedPrices.Select(p => p.ID));
var itemsToAdd = enumerablePrices.Where(p => !existing.Contains(p.ID));
foreach(var item in itemsToAdd)
{
SelectedPrices.Add(item);
}
Это предотвратит квадратичность процедуры, если ваша коллекция (SelectedPrices
) велика.