2012-07-05 11 views
10

अगर मैं एक प्रश्न का निर्माण कहते हैं:सी # Linq - देरी निष्पादन

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

(क्वेरी System.Xml.Linq से XDocument वर्ग का उपयोग कर का निर्माण होता है) और फिर मैं 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")); 

कर यह वास्तव में नवीनतम तत्व हर बार एक ही तत्व हर बार हो रही है और अंत करने के लिए एक नया एक जोड़ा या है elements.Last() है?

उत्तर

11

हां, linq प्रश्न आलसी मूल्यांकन हैं। यह तब तक नहीं है जब तक आप Last() पर कॉल न करें कि क्वेरी निष्पादित की जाएगी। इस मामले में यह हर बार अंतिम तत्व को अंतिम तत्व प्राप्त करेगा।

मुझे लगता है कि यह वास्तव में पहली बार है जब मैंने कई बार Last() (या कोई अन्य ऑपरेटर जो क्वेरी निष्पादित करता है) को कॉल करने का उचित उपयोग देखा है। जब लोग ऐसा करते हैं, तो आमतौर पर गलती से खराब प्रदर्शन होता है।

मुझे लगता है कि linq-to-xml लाइब्रेरी आपकी क्वेरी के लिए अच्छा प्रदर्शन पाने के लिए पर्याप्त स्मार्ट है, लेकिन मैं कोशिश किए बिना इसे भरोसा नहीं करता।

+0

एंडर्स, धन्यवाद। एक और बात अगर आपको कोई फर्क नहीं पड़ता .. मैं विभिन्न तत्वों को वैश्विक चर कैसे बना सकता हूं? चूंकि मैं क्वेरी बना रहा हूं, केवल एक बार मैं इसे प्रारंभ करना चाहता हूं और तत्वों को कॉल करने में सक्षम हूं। अंतिम कोड() मेरे कोड में कहीं और से। क्या यह संभव है? – parliament

+0

यह एक नया और अलग सवाल है। कृपया इसे एक और प्रश्न के रूप में पोस्ट करें (आपके द्वारा जवाब खोजने का प्रयास करने के बाद पागल हो गया है और पुराने प्रश्नों के लिए एसओ खोजने की कोशिश की है)। यहां एक प्रश्न पूछने से शायद ज्यादा मदद नहीं मिलेगी, क्योंकि सवाल हल किए जाने के रूप में चिह्नित किया गया है, कोई भी व्यक्ति इसे नहीं देख पाएगा। –

संबंधित मुद्दे