С# 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 достаточно умна, чтобы получить хорошую производительность для вашего запроса, но я не стал бы доверять ей, не пытаясь.