Вы должны вернуть отфильтрованный результат, поэтому, если ваш метод выглядит следующим образом:
public void Filter(List<Item> searchResults)
изменить на:
public IEnumerable<Item> Filter(List<Item> searchResults)
и затем возвращает результат вместо присвоения его переменной. Другими словами, измените это:
searchResults = (from item1 in searchResults
к этому:
return (from item1 in searchResults
В вашем вызове измените с:
Filter(list)
до:
list = Filter(list).ToList();
Это дает вам максимальное повторное использование, так как вы можете передать список и довериться методу, который не изменит его, оставляя за вами выбор: поместить его в новую переменную или заменить исходный список.
Кроме того, как указал Фредрик в его комментариях, вызов .ToList()
в запросе Linq также должен быть удален, и, возможно, вы захотите изменить также входной параметр на IEnumerable.
Позвольте мне подвести итог.
Если у вас есть такой код:
public void Filter(List<Item> searchResults)
{
searchResults = (from item1 in searchResults
join item2 in coll
on item1.skuID equals item2.Skuid
where item2.SearchableValue == value
select item1).ToList();
}
...
list = ...
Filter(list);
и хочу сделать list
обновленным, я бы изменил код так:
__ changed ______ __ changed ______
public IEnumerable<Item> Filter(IEnumerable<Item> searchResults)
{
return from item1 in searchResults <-- changed
join item2 in coll
on item1.skuID equals item2.Skuid
where item2.SearchableValue == value
select item1; <-- changed
}
...
list = ... _ added__
list = Filter(list).ToList();