Я предполагаю, что вы используете SQL-сервер, откуда поступают данные?
Запрос будет оставаться в пространстве LINQ to SQL, пока, как предлагается в обоих предыдущих ответах, вы не вызовете ToList () или ToArray () или подобное. Только тогда он фактически становится LINQ to Object, и данные создаются и сохраняются в памяти вашей программы.
Таким образом, после внесения изменений в список вы можете выполнить тот же запрос еще раз и получить другой список, в котором нет ваших изменений.
Может быть, лучше объяснить следующее:
(from id in ids select facade.GetObjectById(id)).Where(o=>string.IsNullOrEmpty(o.Name))
Это выдаст ошибку, потому что нет перевода из строки. IsNullOrEmpty в SQL.
(from id in ids select facade.GetObjectById(id)).ToList().Where(o=>string.IsNullOrEmpty(o.Name))
Это не выдаст ошибку, потому что после ToList () вы находитесь в объектном пространстве.