2009-12-04 7 views
18

मैं स्वीडिश शब्दों के साथ स्ट्रिंग की एक सूची मिल गया है कहते हैं: banan, äpple, apelsin, druvaसंस्कृति के अनुसार क्रमबद्ध करने के लिए मैं LINQ कैसे प्राप्त करूं?

अब मैं इस सूची का आदेश दिया करने के लिए (ध्यान रखें कि यह असली क्वेरी की एक बहुत ही सरलीकृत संस्करण है) चाहते हैं :

var result = from f in fruits // The list mentioned above 
      orderby f 
      select f 

यह मैं दे देंगे: apelsin, äpple, banan, druva। हालांकि, स्वीडिश वर्णमाला के अनुसार, मैं मिलना चाहिए: apelsin, banan, druva, äpple

मैं sv-SE को System.Threading.Thread.CurrentThread.CurrentCulture बदल रहा करने की कोशिश की लेकिन वह वास्तव में सब पर यह प्रभावित करने के लिए नहीं मालूम था। क्या मुझे अपना खुद का लैम्ब्डा फ़ंक्शन लिखना है और .OrderBy(...) का उपयोग करना है या क्या LINQ बरकरार रखने के लिए मैं कुछ और कर सकता हूं?

+0

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

उत्तर

32

आप एक प्रश्न अभिव्यक्ति के साथ ऐसा नहीं कर सकते, लेकिन आप स्पष्ट डॉट नोटेशन के साथ यह कर सकते हैं:

var result = fruits.OrderBy(f => f, StringComparer.CurrentCulture); 

कि यह करना चाहिए, धागा की वर्तमान संस्कृति संभालने सही है। वैकल्पिक रूप से:

CultureInfo culture = new CultureInfo("sv-SE"); 
var result = fruits.OrderBy(f => f, StringComparer.Create(culture, false)); 
+0

यूप, मुझे बहुत संदेह था ... मुझे उम्मीद थी कि सरलीकृत LINQ क्वेरी = का उपयोग जारी रखने का एक सुविधाजनक तरीका था) – Blixt

2

मैं आपके उपयोग के मामले की कोशिश की है और यह संस्कृति विशिष्ट comparer प्रदान करने के लिए (दोनों .NET 3.5 में और .NET 4.0) एक आवश्यकता के बिना वैध परिणाम प्रदान किया:

Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("sv-SE"); 
    var fruits = new[] { "banan", "äpple", "apelsin", "druva" }; 
    var result = (from f in fruits orderby f select f).ToList(); 

    // outputs: apelsin, banan, druva, äpple 
    string resultsJoined = string.Join(", ", result); 
संबंधित मुद्दे

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