Вы не можете очистить IEnumerable(Of T)
.Этот интерфейс просто означает, что вы можете перечислить список элементов.Это ничего не говорит о том, как эти предметы хранятся.В случае запроса LINQ хранятся не элементы, а информация о том, как получить их из списка источников.Список элементов, полученных в результате выполнения запроса, нигде не сохраняется отдельно для очистки, а создается каждый раз путем применения логики запроса.
Если вы хотите выполнить похожие, но разные запросы, вам нужно создать несколько запросов,Вы можете создать один базовый запрос, который содержит общую логику, а затем вы можете просто применить определенные части к каждому конкретному запросу.Например, если вы хотите получить все Person
объекты из списка, но вы хотите, чтобы мужчины и женщины раздельно, то вы можете сделать это:
Dim baseQuery = From person In people
Where person.FamilyName = "Smith"
Dim maleQuery = From person In baseQuery
Where person.Sex = Sex.Male
Dim femaleQuery = From person In baseQuery
Where person.Sex = Sex.Female
Все три из этих запросов хранятся в виде логики,не как объекты.Когда вы перечисляете maleQuery
или femaleQuery
, вы выполняете эту логику и получаете результаты один за другим.В каждом случае выполняется логика, хранящаяся в baseQuery
, а также логика в более конкретном запросе, поэтому вы применяете оба фильтра одновременно.
РЕДАКТИРОВАТЬ: я должен уточнить и сказать, что вы не можетеочистить IEnumerable(Of T)
через этот интерфейс.Например, List(Of T)
реализует интерфейс IEnumerable(Of T)
, и вы можете это очистить, но именно этот класс обеспечивает эту функциональность.Если все, что вы знаете об объекте, это то, что он реализует IEnumerable(Of T)
, то вы не можете его очистить, потому что вы не представляете, имеет ли он функциональность помимо той, которая определена этим интерфейсом.У запроса LINQ определенно нет такой функциональности, потому что нет конкретного конкретного списка для очистки.