2012-07-05 28 views
10

Gecikmeli ki:C# Linq - Ben bir sorgu oluşturmak durumunda Yürütme

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

(sorgu System.Xml.Linq gelen XDocument sınıfını kullanılarak inşa ederiz) ve daha sonra ben elements.Last diyoruz() Birkaç defa. Her çağrı en güncel Last() öğesini döndürür mü?

Mesela ben aslında aynı eleman her zaman elements.Last() her zaman en yeni eleman alma ve sonuna kadar yeni bir tane eklenmiş veya mı

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")); 

yaparsanız?

cevap

11

Evet, linq sorguları değerlendirdi tembeldir. Sorgunun yürütülmesi için Last() numaralı telefonu arayana kadar olmaz. Bu durumda, her seferinde en güncel son elemanı alacaktır.

Bu aslında Last() çağıran bir doğru kullanımını (veya sorguyu yürüten başka operatöre) birkaç kez gördüm ilk kez olduğunu düşünüyorum. İnsanlar bunu yaptıklarında, genellikle hatalı performansa neden olurlar.

ben linq-to-xml kütüphanesi sorgu için iyi performans elde etmek kadar akıllı olduğunu düşünüyorum, ama çalışıyor olmadan güven olmaz.

+0

Anders, teşekkür ederiz. Bir şey daha sakıncası yoksa .. Var öğeleri global bir değişken nasıl yapabilirim? Ben sorgu inşa beri sadece ben istiyorum Bir kere başlatmak ve benim kodunda başka yerden() elements.Last arama yapabilmek için. Mümkün mü? – parliament

+0

Bu yeni ve ayrı bir soru. (Eğer cevap kendinizi bulmak için deli bir girişim ettik ve eski sorulara SO aramak için çalıştık sonra) başka soru olarak gönderin. Burada bir soru sormak, büyük olasılıkla pek fazla yardım vermeyecektir, çünkü soru çözüldüğü gibi işaretlenmez. –