С# Linq - отложенное выполнение

Если я построю запрос, скажите:

(запрос создается с использованием класса XDocument из System.Xml.Linq)

var elements = from e in calendarDocument.Root.Elements("elementName") select e;

а затем я вызываю элементы .Last() НЕСКОЛЬКО раз. Будет ли каждый вызов возвращать самый последний элемент Last()?

Например, если я делаю

elements.Last().AddAfterSelf(new XElement("elementName", "someValue1"));
elements.Last().AddAfterSelf(new XElement("elementName", "someValue2"));
elements.Last().AddAfterSelf(new XElement("elementName", "someValue3"));
elements.Last().AddAfterSelf(new XElement("elementName", "someValue4"));

На самом деле он получает последний элемент каждый раз и добавляет новый до конца или является элементом. Last() каждый раз каждый элемент?

Ответ 1

Да, запросы linq ленивы оцениваются. Это не до тех пор, пока вы не назовете Last(), что запрос будет выполнен. В этом случае он будет получать самый последний последний элемент каждый раз.

Я думаю, что это первый раз, когда я видел правильное использование вызова Last() (или любого другого оператора, выполняющего запрос) несколько раз. Когда люди делают это, это обычно по ошибке приводит к плохой работе.

Я думаю, что библиотека linq-to-xml достаточно умна, чтобы получить хорошую производительность для вашего запроса, но я не стал бы доверять ей, не пытаясь.