मैं यहां विभिन्न बिट्स और सही उत्तर के टुकड़े देख रहा हूं, लेकिन मुझे यह सब एक साथ लाने और कुछ चीजों की व्याख्या करना चाहिए।
सबसे पहले, AcceptChanges
केवल एक टेबल पर पूरे लेनदेन को चिह्नित करने और प्रतिबद्ध होने के लिए उपयोग किया जाना चाहिए। जिसका मतलब है कि यदि आप डेटाटेबल को डेटा स्रोत के रूप में बाइंडिंग के लिए उपयोग कर रहे हैं, उदाहरण के लिए, एक SQL सर्वर, तो AcceptChanges
मैन्युअल रूप से कॉल करने की गारंटी होगी कि परिवर्तन कभी भी SQL सर्वर पर सहेजे नहीं जाते हैं ।
इस मुद्दे को और अधिक भ्रमित करने वाली बात यह है कि वास्तव में दो मामले हैं जिनमें अपवाद को फेंक दिया गया है और हमें उन दोनों को रोकना होगा।
1. एक IEnumerable के संग्रह को संशोधित करना
हम किसी इंडेक्स को एनुमरेट किए जा रहे संग्रह में शामिल नहीं कर सकते या हटा नहीं सकते क्योंकि ऐसा करने से एन्यूमरेटर की आंतरिक अनुक्रमण प्रभावित हो सकता है। इसके आसपास पहुंचने के दो तरीके हैं: या तो लूप के लिए अपनी खुद की अनुक्रमणिका बनाएं, या एन्यूमरेशन के लिए एक अलग संग्रह (जो संशोधित नहीं है) का उपयोग करें।
2. हटाए गए प्रविष्टि को पढ़ने का प्रयास
चूंकि डेटाटेबल्स ट्रांजेक्शनल कलेक्शन हैं, प्रविष्टियों को विलोपन के लिए चिह्नित किया जा सकता है लेकिन अभी भी गणना में दिखाई देता है। जिसका अर्थ है कि यदि आप कॉलम के लिए हटाए गए प्रविष्टि को पूछते हैं "name"
तो यह एक अपवाद फेंक देगा। जिसका अर्थ है कि हमें यह देखने के लिए जाँचना चाहिए कि क्या dr.RowState != DataRowState.Deleted
किसी कॉलम को क्वेरी करने से पहले।
यह सब एक साथ डालें
हम सभी गड़बड़ कर सकते हैं और मैन्युअल रूप से कर सकते हैं, या हम डेटाटेबल को हमारे लिए सभी काम करने दे सकते हैं और निम्नलिखित करके एसक्यूएल कॉल की तरह स्टेटमेंट लुक और अधिक बना सकते हैं:
string name = "Joe";
foreach(DataRow dr in dtPerson.Select($"name='{name}'"))
dr.Delete();
DataTable के Select
फ़ंक्शन को कॉल करके , हमारी क्वेरी स्वचालित रूप से DataTable में पहले से ही हटाए गए प्रविष्टियों से बचती है। और चूंकि Select
फ़ंक्शन मेल खाता है, इसलिए जब हम कॉल करते हैं तो संग्रह को संशोधित किया जाता है dr.Delete()
। मैंने भी कोड शोर के बिना चर चयन के लिए अनुमति देने के लिए स्ट्रिंग प्रक्षेप के साथ चयन अभिव्यक्ति को मसालेदार किया है।
[ii]
करने के लिए बदल दिया[i]
, लेकिन :-)