C#Linq-延迟执行

C#Linq-延迟执行,c#,linq,C#,Linq,如果我构建一个查询,请说: (查询是使用System.Xml.Linq中的XDocument类生成的) 然后我多次调用elements.Last()。每个调用是否返回最新的Last()元素 例如,如果我这样做 elements.Last().AddAfterSelf(new XElement("elementName", "someValue1")); elements.Last().AddAfterSelf(new XElement("elementName", "someValue2"));

如果我构建一个查询,请说:

(查询是使用System.Xml.Linq中的XDocument类生成的)

然后我多次调用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"));

它实际上是每次都获取最新的元素并在末尾添加一个新元素,还是每次都是相同的元素。Last()是的,linq查询是惰性计算的。直到调用
Last()
,查询才会执行。在这种情况下,它每次都将获得最新的最后一个元素

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


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

Anders,谢谢。如果你不介意的话,还有一件事。。如何使var元素成为全局变量?因为我只构建了一次查询,所以我想初始化它,并能够从代码中的任何其他地方调用elements.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"));