Повторное выполнение LINQ в C#
Отложенный запрос пересчитывается при каждом
полном переборе. Побочный эффект внутри
Select, например печать, срабатывает снова.
Два foreach печатают "map 1"…
"map 3" дважды - шесть строк "map":
IEnumerable<int> q = Enumerable.Range(1, 3).Select(n =>
{
Console.WriteLine($"map {n}");
return n;
});
foreach (int _ in q) { }
foreach (int _ in q) { }
Метод ToList выполняет запрос один раз и сохраняет список. Второй перебор этого списка не вызывает Select снова:
int runs = 0;
IEnumerable<int> q = Enumerable.Range(1, 2).Select(n => { runs++; return n; });
var list = q.ToList();
foreach (int _ in list) { }
foreach (int _ in list) { }
Console.WriteLine(runs);
Увеличивайте счётчик при преобразовании каждого названия товара. Сохраните результат в список, переберите его дважды и выведите счётчик.