10

如果我建立一个查询说:

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

4

1 回答 1

11

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

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

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

于 2012-07-05T20:44:04.530 回答