LINQ ऑर्डरबी एक से अधिक क्षेत्र के साथ


83

मेरे पास एक सूची है जिसे मुझे दो क्षेत्रों द्वारा क्रमबद्ध करने की आवश्यकता है। मैंने LINQ में OrderBy का उपयोग करने की कोशिश की है, लेकिन यह मुझे केवल एक फ़ील्ड निर्दिष्ट करने की अनुमति देता है। मैं सूची को पहले क्षेत्र द्वारा क्रमबद्ध करने के लिए देख रहा हूं और फिर यदि पहले क्षेत्र में कोई डुप्लिकेट है तो दूसरे क्षेत्र के आधार पर छांटें।

उदाहरण के लिए मैं चाहता हूं कि परिणाम इस तरह दिखें (अंतिम नाम फिर पहले नाम से छांटे गए)।

  • एडम्स, जॉन
  • स्मिथ, जेम्स
  • स्मिथ, पीटर
  • थॉम्पसन, फ्रेड

मैंने देखा है कि आप इसे पूरा करने के लिए SQL जैसे सिंटैक्स का उपयोग कर सकते हैं, लेकिन मैं ऑर्डरबी विधि के साथ इसे करने का तरीका ढूंढ रहा हूं।

IList<Person> listOfPeople = /*The list is filled somehow.*/
IEnumerable<Person> sortedListOfPeople = listOfPeople.OrderBy(aPerson => aPerson.LastName, aPerson.FirstName); //This doesn't work.

जवाबों:


171

आपको उपयोग करने की आवश्यकता है ThenBy:

listOfPeople.OrderBy(person => person.LastName)
            .ThenBy(person => person.FirstName)

1
एक पूर्ण विवरण यहाँ सूचीबद्ध है: weblogs.asp.net/zeeshanhirani/archive/2008/04/16/…
DigitalNomad

यह लैम्ब्डा है .. LINQ सोल्यूशन की जरूरत है @vvick में LINQ है।
रवि राम

5
मुझे नहीं पता तुम्हारा क्या मतलब है। ऊपर के सिंटैक्स के लिए क्वेरी सिंटैक्स केवल चीनी है; दोनों "LINQ" हैं। Msdn.microsoft.com/en-us/library/vstudio/bb397947.aspx देखें और यदि आप प्रश्न पढ़ते हैं, तो वह विशेष रूप से विधि सिंटैक्स संस्करण के लिए पूछ रहा है।
तजमान

25

यदि आप विधि सिंटैक्स का उपयोग करना चाहते हैं, तो उपयोग करें ThenBy(), जैसा कि अन्य ने सुझाव दिया है:

listOfPeople.OrderBy(person => person.LastName)
            .ThenBy(person => person.FirstName)

क्वेरी सिंटैक्स में, जिस तरह से आप चाहते थे, उसी तरह से बहुत कुछ पूरा किया जा सकता है: दो तरह की कुंजियों को अल्पविराम द्वारा अलग किया गया:

from person in listOfPeople
orderby person.LastName, person.FirstName
select person

उपरोक्त कोड वास्तव में पहले उदाहरण के रूप में उपयोग करने वाले कोड के लिए संकलित किया जाएगा OrderBy()और ThenBy()

इसके अलावा, यदि आप चाहते हैं OrderBy()कि दो (या अधिक) सॉर्ट कुंजियाँ हों, तो आप निश्चित रूप से IEnumerable<T>उस आंतरिक कॉल पर एक्सटेंशन विधि के रूप में लिख सकते हैं OrderBy()और ThenBy()




2
var sortedListOfPeople = listOfPeople.OrderBy(aPerson => aPerson.LastName).ThenBy(a => aPerson.FirstName);

2

अधिक दायर के साथ एक सूची का आदेश देने का तरीका निम्नलिखित है:

var soterdList = initialList.OrderBy(x => x.Priority).
                                    ThenBy(x => x.ArrivalDate).
                                    ThenBy(x => x.ShipDate);

आप clasole "ThenBy" के साथ अन्य फ़ील्ड जोड़ सकते हैं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.