(Предположение: вы использовали имя переменной OriginalList
вместо OriginalQuery
или что-то в этом роде, поэтому я предполагаю, что мы говорим о прямом LINQ-To-Object и IEnumerable здесь.)
Да, вы можете , сделав Result1 списком, а не IEnumerable.Например:
Result1 = OriginalList.Where(filter1).Where(filter2).ToList();
Result2 = Result1.Where(filter3);
UpdateFilter3(); // Just changes the filter somehow
Result2 = Result1.Where(filter3);
return Result2;
Как список, Result1
- это не просто IEnumerable, ожидающий отправки, а фактический солидный список вещей с постоянно примененными filter1
и filter2
, так чтоговорить.Когда строка 4 выполняется выше, она по-прежнему будет за пределами сплошного Списка, который вы создали в строке 1. Вы можете поменять фильтр 3 и повторно применить к Результату1 сто раз, а filter1
и filter2
будут применяться только по-прежнему.один раз.
Создание списка стоит, но это будет более чем компенсировано при повторном применении нескольких фильтров filter3
, особенно если filter1
и filter2
сложны или существенно уменьшают набор.