2011-08-12 8 views
9

विशिष्ट आदेश के अनुसार लिंक पर ऑर्डर करना संभव है? कुछलिंक से SQL

List<bbHeader> bb = new List<bbHeader>(); 
bb.OrderBy(x => x.Country.CompareTo(new string[]{"AR","CL","PY","UY","AUP"})); 

विचार की तरह है कि देश क्षेत्र स्ट्रिंग

उत्तर

16

अपने उदाहरण में एक बहुत ही सीधा रास्ता नहीं है। बस ध्यान रखें कि पाए गए आइटम -1 होंगे, जिन्हें आप चाहें तो भी सही कर सकते हैं।

यदि आप कुछ और जटिल करना चाहते हैं, तो आप अपने कस्टम ऑर्डर का उपयोग करके आइटम की तुलना करने के लिए अपना खुद का कस्टम IComparer क्लास कार्यान्वयन बना सकते हैं। इसे ऑर्डरबी में पारित किया जा सकता है। (IndexOf सीधे का उपयोग कर

var result = bb.OrderBy(x => x.Country, new SequenceComparer(new [] { "AR", "CL", "PY", "UY", "AUP" })); 

किसी भी तरह से अच्छी तरह से काम करता है, बाद अच्छा और पुन: प्रयोज्य, लेकिन पूर्व है:

इस तरह के एक IComparer दिखाई देगा:

public sealed class SequenceComparer : IComparer<string> 
{ 
    private string[] _sequence { get; set; } 

    public SequenceComparer(string[] sequence) 
    { 
     if (sequence == null) throw new ArgumentNullException("sequence"); 

     _sequence = sequence; 
    } 

    public int Compare(string x, string y) 
    { 
     if (ReferenceEquals(x, y)) return 0; 

     return Array.IndexOf(_sequence, x).CompareTo(Array.IndexOf(_sequence, y)); 
    } 
} 

और की तरह कहा जा सकता है) अभी भी बहुत संक्षिप्त है। आपकी पंसद।

+0

क्या आप कहीं भी सुझाव दे सकते हैं कि मैं इसके बारे में पढ़ सकता हूं? – Guillermo

+0

@ गुइलर्मो: केवल मेरे उदाहरण को संपादित किया गया है, हालांकि Array.IndexOf() –

+0

ग्रेट का उपयोग करके बहुत सी प्रत्यक्ष तरीके से, मैं 'Array.IndexOf' चाल के लिए विस्तृत स्पष्टीकरण – Guillermo

1

अच्छी तरह से आप अपने खुद के प्रतिनिधि में पारित कर सकते हैं समारोह orderBy करने के लिए और उस मामले में तुलना तर्क के विशेष आदेश के अनुसार आदेश दिया है सकते हैं आप द्वारा परिभाषित किया जाना चाहिए।

var sequence = new [] { "AR", "CL", "PY", "UY", "AUP" }; 

List<bbHeader> bb = new List<bbHeadher>(); 

// fill bb 

// takes the item, checks the index of the country in the array 
var result = bb.OrderBy(x => Array.IndexOf(sequence, x.Country)); 

इस तरह, आप द्वारा सूचकांक देश आदेश दे रहे हैं अनुक्रम स्ट्रिंग में पाया जाता है: