2012-11-07 17 views
5

मेरे पास एक वर्ग नामक एक वर्ग है जिसमें एक संपत्ति LastName है, जो व्यक्ति के अंतिम नाम के लिए एक स्ट्रिंग कोरसपॉन्डिंग को दर्शाती है।कस्टम ऑब्जेक्ट्स की सूची छंटनी

var People = List<Person> 

मैं करना चाहते हैं किस तरह वर्णमाला के क्रम में उनके अंतिम नाम संपत्ति के द्वारा लोगों को है:

मैं इस प्रकार एक सूची बनाई गई।

कुछ उदाहरण को देखने के बाद, मैं

People = People.OrderBy(p => p.LastName); 

की कोशिश की है लेकिन यह काम नहीं करता। आप एक सूची में इस वापस चालू करने के लिए अतिरिक्त कॉल ToList() जरूरत

People = People.OrderBy(p => p.LastName).ToList(); 

OrderBy के बाद से रिटर्न एक IOrderedEnumerable<T>,:

+1

तरह .Tolist() में बदलने की जरूरत है, हमेशा निर्दिष्ट 'work' नहीं पड़ता कि आप द्वारा मतलब है। क्या यह एक संकलन त्रुटि है? या रनटाइम त्रुटि? या अप्रत्याशित परिणाम ?, आदि –

+2

यह एक डुप्लिकेट होना है। – Mathias

+0

संभावित डुप्लिकेट: [सूची का कस्टम सॉर्टिंग ] (http://stackoverflow.com/q/10049466/299327) –

उत्तर

13

LINQ का उपयोग करना, आप परिणाम एक List<Person> में वापस बदलने की आवश्यकता होगी। सबसे आसान ToList():

People = People.OrderBy(p => p.LastName).ToList(); 

उपयोग कर रहा है

People.Sort((p1, p2) => p1.LastName.CompareTo(p2.LastName)); 
2

आप ToList जरूरत है एक नया बनाने के लिए:

हालांकि, बाद से आप प्रभावी रूप से एक में जगह तरह चाहते हैं, तो आप भी List<T>.Sort सीधे उपयोग कर सकते हैं आदेश दिया गया List<Person>

मूल सूची को सॉर्ट करने का दूसरा विकल्प List.Sort का उपयोग कर रहा है :

People.Sort((p1,p2) => p1.LastName.CompareTo(p2.LastName)); 
0

आप परिणाम orderby के माध्यम से नीचे

var people = People.OrderBy(p => p.LastName).ToList(); 
संबंधित मुद्दे