2011-09-30 12 views
6

उम्मीद है कि यह मेरे बारे में एक साधारण बात है जो कुछ बुनियादी समझ में नहीं आता है। नीचे एक आवेदन से दो लिंक कथन हैं जिन पर मैं काम कर रहा हूं।लिंक, ऑर्डरबैडस्केंडिंग, फर्स्ट, और बेईमान डिफॉल्ट इफेक्ट

EDMXModel.Classes.Period p1 = entities.Periods.DefaultIfEmpty(null).OrderByDescending(ap => ap.UID).First(); 

EDMXModel.Classes.Period p2 = entities.Periods.OrderByDescending(ap => ap.UID).DefaultIfEmpty(null).First(); 

entities.Periods दो अवधि वस्तुओं, एक unique UID के साथ प्रत्येक युक्त एक सेट है।

सब कुछ मैं समझता हूं, पी 1 और पी 2 समान होना चाहिए।

हालांकि, मेरे पर्यावरण में, वे नहीं हैं।

पी 1 सही है (यानी यह सेट ऑब्जेक्ट के बराबर है जो सेट में सबसे बड़ा यूआईडी है)।

पी 2, हालांकि, सही नहीं है (यानी यह सेट में अन्य अवधि के बराबर है)।

कोई विचार?

उत्तर

8

संस्थाओं के लिए LINQ पर DefaultIfEmpty() आदेश OrderByDescending() द्वारा स्थापित किया गया, (भी here देखें) आदेश हमेशा पिछले होना चाहिए बनाए रखने के लिए गारंटी नहीं है और यही वजह है कि पहले मामले में काम करता है - लेकिन आप मेरी राय में या तो उपयोग नहीं करना चाहिए - यह वही है जो FirstOrDefault() है:

EDMXModel.Classes.Period p1 = entities.Periods 
             .OrderByDescending(ap => ap.UID) 
             .FirstOrDefault(); 
संबंधित मुद्दे