LINQ

2010-06-09 12 views
44

का उपयोग करके ऑर्डरबी में कस्टम सॉर्ट लॉजिक स्ट्रिंग्स की एक सूची को सॉर्ट करने का सही तरीका क्या होगा जहां मैं सूची के नीचे होने के लिए अंडरस्कोर '_' से शुरू होने वाली वस्तुओं को चाहता हूं, अन्यथा सबकुछ वर्णमाला है।LINQ

अभी मैं कुछ इस तरह कर रहा हूँ,

autoList.OrderBy(a => a.StartsWith("_") ? "ZZZZZZ"+a : a) 

उत्तर

89

यदि आप चाहते हैं कस्टम आदेश से परे उन्हें सुलझाने के लिए मानक string.Compare उपयोग करें, लेकिन डॉन की आवश्यकता होगी 'टी एक comparer की आपूर्ति करना चाहते हैं, तो आप इसे कर सकते हैं - एसक्यूएल शैली:

autoList 
.OrderBy(a => a.StartsWith("_") ? 2 : 1) 
.ThenBy(a => a); 
+4

मुझे यह समाधान बेहतर पसंद है। मैं हमेशा तबबी के बारे में भूल जाता हूँ। –

+0

धन्यवाद। यह बिल्कुल सही है. –

+2

+1 वास्तव में उस समाधान की तरह। बहुत अच्छा। –

4

मैं तुम्हें OrderBy(Func<>, IComparer<>) का उपयोग करें और अपने खुद के Comparer जो अपने कस्टम तर्क को लागू करेगा निर्दिष्ट करने की आवश्यकता है।

2

ऑर्डरबी के अधिभार का उपयोग करें जो IComparer लेता है, पहले Func तर्क तुलनाकर्ता को खिलाएगा, और वहां से आपको स्ट्रिंग की तुलना करने की आवश्यकता होगी। एक के मामले या _ के साथ दोनों शुरू होता है, और के साथ पहला सौदा फिर वहाँ से आप शायद _ पट्टी और सिर्फ पहली _

+1

हालांकि, सभी ईमानदारी में, हालांकि तकनीकी रूप से अपने दृष्टिकोण एक हैक है और असफल हो सकता है, यह बहुत आसान है और अपने उद्देश्य समझने के लिए आसान है। –

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