Linq-запросы являются ленивыми, поэтому до тех пор, пока вы не перечислите newList, вы не увидите изменений, потому что ваше местоположение не было выполнено.
var list = new List<string> { "1", "2", "3", "4", "5" };
bool flag = false;
var newList = list.Where(item =>
{
flag = true;
return item == "2";
});
Console.WriteLine(flag); // Flag is still false.
foreach (var item in newList) {
// It doesn't matter what we do here, just that we enumerate the list.
}
Console.Write(flag); // Flag is now true.
Функция foreach вызывает выполнение where и устанавливает ваш флаг.
Я бы действительно советовал не использовать предикат where для создания побочного эффекта, кстати, но вы так и сделаете.