2009-07-14 20 views
34

मैं हमेशा सोचता हूं कि == ऑपरेटर का उपयोग करने के बजाय linq में equals कीवर्ड क्यों है।लिंक: == के बीच क्या अंतर है और इसमें शामिल होने के बराबर है?

Property deadline = 
(from p in properties 
join w in widgets 
    on p.WidgetID equals w.ID 
select p).First(); 

Property deadline = 
(from p in properties 
join w in widgets 
    on p.WidgetID == w.ID 
select p).First(); 

[संपादित करें] के बजाय

प्रश्न पुनः निर्मित और उदाहरण संशोधित किया गया।

उत्तर

38

वहाँ The Moth पर मैट वॉरेन द्वारा एक अच्छा व्याख्या दी गई है:

"कारण सी # शब्द 'के बराबर होती है' है बजाय '==' ऑपरेटर बनाने के लिए यह जरूरी है कि 'चालू' खंड की जरूरत स्पष्ट हो गया था आप दो अलग-अलग अभिव्यक्तियों की आपूर्ति करने के लिए समानता के लिए तुलना की जाती हैं, जो कि एक अनुमानित अभिव्यक्ति नहीं है। इन-जॉइन पैटर्न पैटर्न को एन्यूमेरेबल.जॉइन() मानक क्वेरी ऑपरेटर में दो अलग-अलग प्रतिनिधियों को निर्दिष्ट किया जाता है जिनका उपयोग मूल्यों की गणना करने के लिए किया जाता है। इसे एक के साथ लुकअप टेबल बनाने और दूसरे के साथ लुकअप टेबल में जांच करने के लिए अलग-अलग प्रतिनिधियों के रूप में उनकी आवश्यकता होती है। एसक्यूएल जैसे पूर्ण क्वेरी प्रोसेसर एक एकल अनुमान अभिव्यक्ति की जांच करने के लिए स्वतंत्र है और कैसे चुनें यह इसे संसाधित करने जा रहा है। फिर भी, LINQ एसक्यूएल के समान संचालित की आवश्यकता होगी कि शामिल होने हालत हमेशा एक अभिव्यक्ति पेड़, सरल में स्मृति वस्तु मामले के लिए एक महत्वपूर्ण ओवरहेड रूप में निर्दिष्ट किया बनाने के लिए। "

हालांकि, इस से संबंधित है join। मैं ' सुनिश्चित करें कि equals अपने कोड उदाहरण में प्रयुक्त हूँ नहीं किया जाना चाहिए (यह भी संकलित करता है?)।

+1

आप सही हैं, यह संकलित भी नहीं करता है, मेरा खराब! यह कुछ समय हो गया है क्योंकि मुझे समस्या == और बराबर थी, लेकिन मुझे लगता है कि यह वापस शामिल होने के साथ था जब मैंने गलती से == का उपयोग किया था। स्पष्टीकरण के लिए धन्यवाद, वैसे भी! –

15

आपका पहला संस्करण संकलन नहीं है। आप केवल उपयोग equals मिलती है, के लिए स्पष्ट equijoin के अलग-अलग हिस्सों बनाने के लिए कंपाइलर

+0

हां ... पहला वाला ठीक है। –

+0

हाँ, क्षमा करें, मेरा बुरा। यह कुछ समय हो गया है क्योंकि मुझे समस्या थी (जो निश्चित रूप से शामिल होने के साथ था), जहां मैंने गलती से बराबर के बदले == डाल दिया और आश्चर्य किया कि पहले स्थान पर एक समान कीवर्ड क्यों है। मुझे बस याद आया क्योंकि मुझे इसका कोई जवाब नहीं मिला;) –

+0

तो शामिल होने के मामले में, क्या यह == का उपयोग करने के लिए वैध है या क्या आप हमेशा बराबर का उपयोग करना चाहिए? –

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