Я бы лично выделил это:
Dim applesOnSale = AppleController.GetRedApples() _
.Where(Function(a) PriceController.OnSale(a))
For Each apple in applesOnSale
'do something
Next
В полной IDE первая часть может быть одной строкой - или вы можете использовать выражение запроса VB, например:
Dim applesOnSale = From apple in AppleController.GetRedApples() _
Where PriceController.OnSale(apple)
For Each apple in applesOnSale
'do something
Next
Это отделяет «какие элементы вас интересуют» от «того, что вы хотите делать с элементами», что я лично считаю полезным с точки зрения читабельности.
Обратите внимание, что в некоторых ситуациях Where
может не работать, однако - если GetRedApples
возвращает таблицу из LINQ to SQL DataContext
, например, он попытается перевести предложение Where
в SQL - который не будет работать.
При условии, что вы используете LINQ to Objects, присваивание фактически не будет выполнять зацикливание - оно просто настроит запрос. Предложение "where" будет оцениваться только для каждого элемента при циклическом выполнении запроса.