2012-07-05 189 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