C#Linq - 延迟执行

par*_*ent 10 c# linq

如果我构建一个查询说:

(使用System.Xml.Linq中的XDocument类构建查询)

var elements = from e in calendarDocument.Root.Elements("elementName") select e;
Run Code Online (Sandbox Code Playgroud)

然后我调用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"));
Run Code Online (Sandbox Code Playgroud)

它实际上是每次都获取最新的元素并添加一个新元素或者是elements.Last()每次都是相同的元素吗?

And*_*bel 11

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

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

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