2012-07-05 138 views
10

如果我建一个查询说:C#的LINQ - 延迟执行

(查询是建立使用从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()相同的元素?

回答

11

是的,linq查询是懒惰评估。直到你致电Last(),查询才会被执行。在这种情况下,它会每次获得最新的最后一个元素。

我认为这实际上是我第一次看到正确使用调用Last()(或任何其他运算符执行查询)的几次。当人们这样做时,通常会错误地导致糟糕的表现。

我认为linq-to-xml库足够聪明,可以为您的查询获得良好的性能,但如果不尝试,我不会相信它。

+0

安德斯,谢谢。还有一件事,如果你不介意..我怎样才能使var元素成为一个全局变量?由于我只是一次构建查询,所以我想初始化它,并且能够从我的代码中的任何其他地方调用elements.Last()。这可能吗? – parliament 2012-07-06 17:48:45

+0

这是一个独立的新问题。请将它作为另一个问题发布(在你试图自己找到答案并试图搜索旧问题后)。在这里提出问题可能不会提供太多帮助,因为问题被标记为解决,没有人会看到它。 – 2012-07-06 21:52:20