कल्पना कीजिए मैं निम्नलिखित है: प्रलेखन के अनुसारकैसे LINQ एक बयान का उपयोग करने में निष्पादन स्थगित करता है जब
private IEnumerable MyFunc(parameter a)
{
using(MyDataContext dc = new MyDataContext)
{
return dc.tablename.Select(row => row.parameter == a);
}
}
private void UsingFunc()
{
var result = MyFunc(new a());
foreach(var row in result)
{
//Do something
}
}
जब तक मैं वास्तविक परिणाम है, जो foreach पर लाइन में होता है गणना LINQ निष्पादन स्थगित होगा । हालांकि, उपयोग करने वाले कथन को ऑब्जेक्ट को MyFunct() पर कॉल के अंत में विश्वसनीय रूप से एकत्रित करने के लिए मजबूर होना चाहिए।
क्या वास्तव में होता है, जब disposer रन और/या परिणाम चलेगा?
केवल बात मैं के बारे में सोच सकते हैं आस्थगित निष्पादन, संकलन समय पर की जाती है ताकि वास्तविक कॉल, foreach की पहली पंक्ति के लिए संकलक द्वारा ले जाया जाता है सही ढंग से प्रदर्शन करने के लिए का उपयोग कर के कारण, लेकिन foreach तक नहीं चला है लाइन? वहाँ एक गुरु वहाँ बाहर मदद कर सकता है?
संपादित करें:
नोट: यह कोड काम करता है, मुझे बस समझ में नहीं आता है।
मैंने कुछ पढ़ा और मुझे अपने कोड में एहसास हुआ कि मैंने ToList() एक्सटेंशन विधि कहा है जो निश्चित रूप से परिणाम को दर्शाता है। वास्तविक प्रश्न के उत्तर के लिए चुने हुए उत्तर का व्यवहार बिल्कुल सही है।
किसी भी भ्रम के लिए खेद है।
अच्छा सवाल है। मुझे इस पर बमबारी कर दी गई है .. एक प्रयोग (डेटाकॉन्टेक्स्ट) शानदार रूप से – Gishu
को उड़ाता है मुझे ऑब्जेक्ट डिस्प्ले अपवाद "डेटा कॉन्टेक्स्ट का निपटान करने के बाद एक्सेस किया जाता है।" जब मैं कोशिश करता हूँ। क्या आपका MyDataContext LINQ डिजाइनर से स्वत: जेनरेट किया गया DataContext है? क्या यह डेटाकॉन्टेक्स्ट से प्राप्त होता है? –
मैं तीसरी धारणा: यदि आप "उपयोग" का उपयोग करके अपने डेटाकॉन्टेक्स्ट का निपटान करते हैं, तो आप बाद में डेटाकॉन्टेक्स्ट का उपयोग करने का प्रयास करते समय एक रनटाइम अपवाद प्राप्त करेंगे। मुझे पता है मैंने इसे किया है। –