2010-12-13 15 views
5

मैं एक प्रकार के रूप में निम्नानुसार परिभाषित किया है:एक IEnumerable <type> छंटाई तीन से

public class myType 
{ 
    public string firstName { get; set; } 
    public string middleName { get; set; } 
    public string lastName { get; set; } 
} 

मैं एक IEnumerable<myType> है।

मैं अपने टाइप टाइप की मेरी सूची को क्रमबद्ध करने के लिए .OrderBy() विस्तार का उपयोग करना चाहता हूं।

वस्तुओं को अंतिम नाम से क्रम में होना चाहिए। जहां अंतिम नाम समान हैं, वे पहले नाम से क्रमशः होना चाहिए। जहां पहले नाम समान हैं, वे मध्य नाम से क्रमशः होना चाहिए।

मैं यह कैसे कर सकता हूं?

+1

(सदस्य * सुलभ होने की आवश्यकता होगी * (आमतौर पर: 'public') उन पर सॉर्ट करने के लिए; और गुणों को आमतौर पर फ़ील्ड पर प्राथमिकता दी जाएगी) –

उत्तर

17
var qry = items.OrderBy(x => x.lastName).ThenBy(x => x.firstName) 
    .ThenBy(x => x.middleName); 

या LINQ वाक्य रचना में:

var qry = from x in items 
      orderby x.lastName, x.firstName, x.middleName 
      select x; 
+0

+1। याद रखें कि लैम्ब्डा कोई भी कोड हो सकता है जो एक स्ट्रिंग देता है, उदाहरण के लिए, आप कर सकते हैं। एक शून्य जांच करें और कुछ गैर-शून्य डिफ़ॉल्ट मान वापस करें। मुझे नहीं पता कि अधिकांश .NET सॉर्टर्स के पीछे अंतर्निहित क्विकस्टोर्ट कैसे नल को संभालेगा। इसके अलावा, हालांकि ऑर्डरबी() एक स्थिर प्रकार होने का दावा करता है, अगर ऐसा होता है तो यह अंतर्निहित सॉर्टर का उपयोग नहीं करता है जो सूची.Sort और Array.Sort को भी शक्ति देता है, और अस्थिर है। – KeithS

+2

@ किथ्स: इसे एक स्ट्रिंग वापस करने की आवश्यकता नहीं है। यह कुछ भी हो सकता है जो एक मूल्य लौटाता है, जब तक मूल्यों को बाद में ऑर्डर करने के लिए तुलना की जा सकती है। और हाँ, ऑर्डरबी वास्तव में * स्थिर है। –

7
myList.OrderBy(t => t.lastName).ThenBy(t => t.firstName).ThenBy(t => t.middleName) 

इसके अलावा, प्रत्येक OrderBy और ThenBy एक Descending संस्करण है, तो OrderByDescending और ThenByDescending

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