सह-कार्यकर्ता: यहाँ ईमानदार होना चाहिए। Linq सिंटेक्स बेकार है। यह भ्रामक और गैर-सहज है।
आप उस आलोचना के साथ बहस नहीं कर सकते। अपने सहकर्मी के लिए, यह बेकार है । हम एक वाक्यविन्यास डिजाइन करने में विफल रहे, जो उनके लिए, स्पष्ट और सहज था। यह हमारी असफलता है, और आप अपने सहकर्मी से मेरी क्षमा याचना पर पारित कर सकते हैं। मुझे सुझाव है कि इसे बेहतर बनाने के लिए सुझाव देने में खुशी होगी; क्या विशेष रूप से आपके सहकर्मी को भ्रमित या अनपेक्षित लगता है?
हालाँकि, आप सभी को खुश नहीं कर सकते। मेरी व्यक्तिगत राय, और इस विषय पर जिन लोगों से मैंने बात की है, उनमें से अधिकांश की राय यह है कि क्वेरी कॉम्प्रिहेंशन सिंटैक्स समतुल्य अनिवार्य सिंटैक्स की तुलना में अधिक स्पष्ट है। स्पष्ट रूप से हर कोई सहमत नहीं है, लेकिन सौभाग्य से हमें भाषा डिजाइन करते समय हमारे सभी लाखों ग्राहकों की आम सहमति की आवश्यकता नहीं होती है।
इस विषय पर कि "सहज" क्या है, हालांकि, मुझे अंग्रेजी भाषाविद् की कहानी याद आ गई, जिन्होंने कई अलग-अलग भाषाओं का अध्ययन किया और अंत में यह निष्कर्ष निकाला कि अंग्रेजी सभी भाषाओं में सर्वश्रेष्ठ थी क्योंकि अंग्रेजी में शब्द उसी क्रम में आते हैं जो आप उन्हें सोचो । फ्रेंच के विपरीत, जहां वे लगातार "कुत्ते सफेद मांस खाते हैं" जैसी चीजें कह रहे हैं। फ्रेंच लोगों के लिए शब्दों को सही क्रम में सोचना कितना कठिन होगा और फिर उन्हें फ्रांसीसी क्रम में कहना होगा ! फ्रेंच इतना अचूक है! यह आश्चर्यजनक है कि फ्रांसीसी इसे बोलने का प्रबंधन करते हैं। और जर्मन? जहाँ उन्हें लगता है कि "कुत्ता मांस खाता है" लेकिन फिर कहना होगा कि "कुत्ता मांस खाता है"!?!
अक्सर "सहज" क्या केवल परिचित का मामला है। इससे पहले कि मैं "चुनिंदा" खंड के साथ अपने प्रश्नों को शुरू करने से पहले मुझे LINQ के साथ काम करने में महीनों लगे। अब यह दूसरी प्रकृति है, और SQL ऑर्डर विचित्र लगता है।
जो यह है! स्कोपिंग नियम SQL में गड़बड़ हैं। कुछ चीज़ जो आप अपने सहकर्मी को इंगित करना चाहते हैं, वह यह है कि LINQ को सावधानीपूर्वक डिज़ाइन किया गया था ताकि (1) वेरिएबल्स और स्कोप्स का परिचय बाएं से दाएं (*) हो, और (2) यह आदेश पृष्ठ पर क्वेरी दिखाई दे। जिस क्रम में इसे निष्पादित किया जाता है। यानी जब आप कहें
from c in customers where c.City == "London" select c.Name
सी बाईं ओर के दायरे में दिखाई देती है, और दाईं ओर दायरे में रहती है। और जिस क्रम में चीजें होती हैं: पहले "ग्राहकों" का मूल्यांकन किया जाता है। फिर अनुक्रम को फ़िल्टर करने के लिए "जहां" का मूल्यांकन किया जाता है। फिर फ़िल्टर किए गए अनुक्रम को "चयन" द्वारा अनुमानित किया जाता है।
SQL के पास यह गुण नहीं है। अगर आप कहते हैं
SELECT Name FROM Customers WHERE City = 'London'
तब "नाम" को उसके दाईं ओर कुछ के दायरे में लाया जाता है, उसके बाईं ओर नहीं, और क्वेरी को पूरी तरह से गड़बड़ क्रम में निष्पादित किया जाता है; मध्य खंड का पहले मूल्यांकन किया जाता है, फिर अंतिम खंड और फिर पहला खंड। यह अब मेरे लिए पागल और अनजाना लगता है, केवल LINQ के साथ इतने लंबे समय तक काम किया है।
(*) स्कूपिंग नियम लिंड क्यू में थोड़े अजीब होते हैं। लेकिन इसके अलावा, scopes घोंसला अच्छी तरह से।