2010-03-10 15 views
11

से मैं एक उदाहरण दो डेटा बिंदु युक्त वर्ग की है।क्रमबद्ध एक संपत्ति से एक सूची और फिर एक और

List<MyClass> list = new List<MyClass>() { 
    new MyClass(MyClass.Sort.Third, "B"), 
    new MyClass(MyClass.Sort.First, "D"), 
    new MyClass(MyClass.Sort.First, "A"), 
    new MyClass(MyClass.Sort.Fourth, "C"), 
    new MyClass(MyClass.Sort.First, "AB"), 
    new MyClass(MyClass.Sort.Second, "Z"), 
}; 

उत्पादन तो होगा: (Name दिखा)

A 
AB 
D 
Z 
B 
C 

मैं (enum के आधार पर वर्गीकृत कई छोटे विन्यास में, एक foreach का उपयोग कर आइटम को अलग करने के द्वारा यह कर कर लिया है मूल्य) लेकिन यह बहुत कठिन लगता है - और मुझे लगता है कि कुछ LINQ समाधान होना चाहिए जो मुझे नहीं पता।

उत्तर

20

विस्तार विधियों का उपयोग, पहले OrderBy enum, ThenBy नाम।

var sorted = list.OrderBy(m => m.Sort).ThenBy(m => m.Name); 
4

यह करना चाहिए, मैं अच्छा LINQ समाधान से

var result = from m in list 
      orderby m.Sort, m.Name 
      select m; 
+0

यह वाक्यविन्यास मान्य नहीं है। 'चयन एम' को अंत में रखा जाना चाहिए, तो यह सही होगा। –

+0

धन्यवाद अहमद, सही। 3am असफल – pdr

5

अलावा लगता है, तो आप भी इस एक विधि की तुलना के साथ आप की तरह उल्लेख कर सकते हैं। बनाओ MyClassIComparable इंटरफ़ेस को लागू, एक CompareTo विधि की तरह साथ:

public int CompareTo(object obj) 
    { 
     MyClass other = (MyClass)obj; 
     int sort = this.srt.CompareTo(other.srt); 
     return (sort == 0) ? this.Name.CompareTo(other.Name) : sort; 
    } 

उपरोक्त विधि enum द्वारा पहली बार अपने वस्तुओं आदेश देगा, और अगर enum मान बराबर हैं तो यह नाम है। फिर, बस list.Sort() पर कॉल करें और यह सही क्रम आउटपुट करेगा।

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