如果我构建一个查询说:
(使用System.Xml.Linq中的XDocument类构建查询)
var elements = from e in calendarDocument.Root.Elements("elementName") select e;
然后我调用elements.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"));
它实际上是每次都获取最新元素并在最后添加一个新元素,或者每次都是elements.Last()相同的元素?
答案 0 :(得分:11)
是的,linq查询是惰性评估的。直到您致电Last()
,才会执行查询。在这种情况下,它每次都会获得最新的最后一个元素。
我认为这实际上是我第一次看到正确使用调用Last()
(或任何其他执行查询的运算符)的次数。当人们这样做时,通常会错误地导致糟糕的表现。
我认为linq-to-xml库非常智能,可以为您的查询提供良好的性能,但如果不尝试我就不会相信它。