2011-12-08 13 views
7

पर समाप्त हो गया है मेरे पास एक कक्षा Offer है जिसमें एक दायर श्रेणी है।एक सूची क्रमबद्ध करें ताकि एक विशिष्ट मान शीर्ष

मैं चाहता हूं कि एक विशिष्ट श्रेणी के सभी ऑफ़र शीर्ष पर दिखाई दें, इसके बाद अन्य सभी।

मैंने कोशिश की, लेकिन इसका कोई फायदा नहीं हुआ, आप क्या सलाह देंगे?

Offers = Offers.OrderBy(x => x.Category == "Corporate").ToList(); 
+0

जब आप "कोई फायदा नहीं" कहते हैं, तो उस अभिव्यक्ति का नतीजा क्या है? इसके साथ गलत क्या है? –

+0

http://stackoverflow.com/questions/728319/linq-orderby-against-specific-values ​​ –

+1

पर एक नज़र डालें, यह ठीक से क्रमबद्ध नहीं है, ऐसा लगता है कि यह अभी भी मूल क्रम में है। – Wesley

उत्तर

19

जब आप एक बूलियन मान false द्वारा आदेश (0) true से पहले आता है (1)। तत्वों है कि विधेय से मेल प्राप्त करने के लिए पहले आप OrderByDescending का उपयोग करके सॉर्ट क्रम को उल्टा करना चाहिए:

Offers = Offers.OrderByDescending(x => x.Category == "Corporate").ToList(); 
+0

+1 अच्छा समाधान –

+0

उह, लेकिन यह सब कुछ के आदेश को भी उलट देगा। 'ऑर्डरबी (x => x.Category! = "कॉर्पोरेट")' इसके बजाए 'कोशिश करें। –

+3

+1। और शायद श्रेणी नाम द्वारा शेष ऑफ़र को सॉर्ट करने के लिए एक ThenBy (x => x.Category) जोड़ना ..? –

10

C# Language Specification 5.0true और false मूल्यों के लिए एक बाइट प्रतिनिधित्व निर्दिष्ट नहीं है। इसलिए, इस धारणा पर भरोसा करना बेहतर नहीं है कि true1 द्वारा दर्शाया गया है। इसके अलावा, बूलियन अभिव्यक्ति x.Category == "Corporate" द्वारा सॉर्ट करने का नतीजा स्पष्ट नहीं है, क्योंकि true को नकारात्मक मान भी दर्शाया जा सकता है। इसलिए, मैं एक प्रकार का मूल्य स्पष्ट रूप से निर्दिष्ट करने के लिए एक टर्नरी ऑपरेटर का उपयोग करता हूं:

Offers = Offers 
    .OrderBy(x => x.Category == "Corporate" ? 0 : 1) 
    .ThenBy(x => x.Category) 
    .ThenBy(x => x.Date) // or what ever 
    .ToList(); 
संबंधित मुद्दे