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()每次都使用相同的元素吗?

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

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

我认为linq-to-xml库非常智能,可以为您的查询提供良好的性能,但是如果不尝试我就不会相信它。