2012-07-05 26 views
10

私は、クエリを構築する場合と言う:)C#のLINQ - 遅延実行

var elements = from e in calendarDocument.Root.Elements("elementName") select e; 

(クエリがSystem.Xml.LinqからXDocumentクラスを使用して構築される)

そして私は(elements.Lastを呼び出します数回。各呼び出しは最新のLast()要素を返しますか?

たとえば、私はそれが実際には同じ要素毎回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")); 

んか?

答えて

11

はい、linqクエリは遅延評価されます。クエリが実行されるのはLast()です。この場合、毎回最新の要素を取得します。

これは、Last()(またはクエリを実行する他の演算子)を何度か呼び出して初めて実際に使用されたと思います。人々がそれをするとき、それは間違って悪い業績を引き起こすことが通常あります。

私はlinq-to-xmlライブラリがあなたのクエリに対して良いパフォーマンスを得るには十分にスマートだと思っていますが、試してもそれを信頼しません。

+0

アンダー、ありがとう。あなたが気にしないなら、もう1つ.. var要素をグローバル変数にするにはどうすればいいですか?私はそれを初期化し、私のコード内のどこからでもelements.Last()を呼び出すことができるように、クエリを1回構築します。これは可能ですか? – parliament

+0

これは新しい新しい質問です。別の質問として投稿してください(あなた自身で答えを見つけようと怒っていて、古い質問についてSOを検索しようとした後)。ここで質問をすることは、おそらく多くの助けを与えることはないでしょう。問題は解決されたとマークされています。 –

関連する問題