Linq и пошаговая отладка
Господа, подскажите, пожалуйста, как понимать. Есть массив строк. К данному массиву я обращаюсь через LINQ запрос. Ранее я предполагал, что когда выполняется запрос, то формируется определенный результат, который сохраняется в определенном объекте (своего внутреннего типа), и этот объект реализует IEnumerable. Ну дальше foreach уже работает с этим объектом.
Однако я выполнил программу в пошаговом режиме и потерялся ))). В информации об отладке при первом же обращении к переменной запроса v в разделе "Представление результатов" сразу же появляется готовый ответ (см. рисунок), как я и ожидал. НО я предполагал, что на этом и конец. Однако при дальнейшей пошаговой отладке компилятор почему-то лезет в код запроса и как бы пошагово получает тот результат, который уже мне был показан в разделе "Представление результатов".
Зачем он это делает, если результат уже известен?
Сам код. Понимаю, что запрос корявый, но это в учебных целях.
class Program
{
static void Main(string[] args)
{
string[] s = { "Gleb", "Pavel", "Guzel", "Sergey", "Mainsis", "Berkak" };
var v = from str in s
where str.Length > 4
select str
into Temp
let x = Temp.LastIndexOf('l')
where x != -1 && Temp.Substring(x) == "l"
select Temp;
foreach (var Result in v)
{
Console.WriteLine(Result);
}
}
}
}