你应该返回过滤后的结果,所以如果你的方法看起来像这样:
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();
这为您提供了最大的可重用性,因为您可以传入一个列表并相信该方法不会更改它,让您选择是将其放入新变量还是替换原始列表。
此外,正如 Fredrik 在他的 cmets 中所指出的,在 Linq 查询中对 .ToList() 的调用也应该被删除,并且您可能还希望将输入参数更改为 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();