2010-12-08 6 views
5

मुझे पता है कि एक संपत्ति द्वारा आदेश कैसे दिया जाए, फिर एक और संपत्ति। मैं सोच रहा हूं कि किसी भी संपत्ति (या एक ही समय में एकाधिक गुण) द्वारा आदेश देने के लिए एक linq तरीका है।लिंक आदेश किसी भी संपत्ति

उदाहरण के लिए नामों की सूची:

->Adam  Jones 
    ->Dude  Lebowski 
    ->Zander Berry 

हल हो सकते हैं:

->Adam  Jones 
    Zander ->Berry 
    ->Dude  Lebowski 
+1

एक संपत्ति द्वारा क्रमबद्ध करने से अलग "एक ही समय में एकाधिक गुण" द्वारा क्रमबद्ध कैसे किया जाता है और फिर किसी अन्य द्वारा? – LBushkin

+1

यह मुझे लगता है जैसे ओपी दो गुणों के शुरुआती-क्रमबद्ध मूल्य से सॉर्ट करना चाहता है। – cdhowie

+1

आप 'एडम जोन्स' और 'जोन्स एडम' को कैसे क्रमबद्ध करते हैं? किस क्रम में? –

उत्तर

6

एक अजीब एक चाहते करने के लिए है।

आप किसी भी समारोह < TSource पारित कर सकते हैं, TKey > आप OrderBy में पसंद: -

names.OrderBy(x => x.FirstName.CompareTo(x.LastName) < 0 
        ? x.FirstName 
        : x.LastName); 

या अगर आपको लगता है इनलाइन त्रिगुट बदसूरत लग रहा है (या आप तरह सब कुछ खत्म हो पुन: उपयोग करने की आवश्यकता है जगह), आप अपने खुद IComparer लिख सकते हैं: -

http://msdn.microsoft.com/en-us/library/bb549422.aspx

class PersonFirstOrLastNameComparer : IComparer<Person> 
{ 
    public int Compare(Person x, Person y) 
    { 
    return GetKey(x).CompareTo(GetKey(y)); 
    } 

    private String GetKey(Person person) 
    { 
    if (person.FirstName.CompareTo(person.LastName) < 0) 
    { 
     return person.FirstName; 
    } 
    else 
    { 
     return person.LastName; 
    } 
    } 
} 

और: -

names.OrderBy(x => x, new PersonFirstOrLastNameComparer()); 

सच हालांकि, मैं इसके खिलाफ सलाह देंगे। यदि आप मॉडल श्रेणी पर पहले दो गुणों से पहले सॉर्टिंग करते हैं, तो मुझे संदेह है कि आपकी मॉडल क्लास कार्य तक नहीं है।

मैं आपके विशिष्ट एप्लिकेशन के बारे में और जानने के बिना और अधिक नहीं कह सकता, लेकिन शायद मैं मॉडल वर्ग के अंदर उस तर्क को समाहित करने की सलाह दूंगा (या तो एक विशिष्ट संपत्ति जैसे व्यक्ति.SortKey या यदि यह एक सार्वभौमिक प्रकार है तुलना करने के लिए ओवरराइड करना) या एक दृश्य मॉडल बनाना। मेरे द्वारा पोस्ट किए गए कोड स्निपेट कोड समीक्षा में एक भौं-राइज़र का थोड़ा सा होगा। मुझे लगता है कि मॉडल (या व्यूमोडेल) के साथ तर्क रखना इस उद्देश्य को स्पष्ट करेगा।

+0

आह! यह बहुत आसान है। मैं सोच रहा था कि 'ओडरबी ((x, y) =>/** /) '' sort' फ़ंक्शन के समान होगा लेकिन यह चाल है। –

3

के बारे में क्या:

.OrderBy(obj => (obj.PropA < obj.PropB) ? obj.PropA : obj.PropB) 

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

  • कोई संबंधित समस्या नहीं^_^