LINQ

2010-10-23 12 views
38

के साथ सी # में क्रमबद्ध सूची मैं सी # में एक सूची क्रमबद्ध करना चाहता हूं।LINQ

जहां संरचना संपत्ति एवीसी सच हो जाती है तो उन्हें पहले दिखाएं तो एवीसी झूठी हो जाती है। सी # LINQ में ऐसा करने का कोई तरीका है?

उत्तर

88

खैर, सबसे आसान तरीका का उपयोग कर LINQ कुछ इस तरह होगा:

list = list.OrderBy(x => x.AVC ? 0 : 1) 
      .ToList(); 

या

list = list.OrderByDescending(x => x.AVC) 
      .ToList(); 

मेरा मानना ​​है कि कि bool मूल्यों की प्राकृतिक आदेश false < true है, लेकिन प्रथम रूप यह स्पष्ट आईएमओ बनाता है, क्योंकि हर कोई जानता है कि 0 < 1

ध्यान दें कि यह मूल सूची को स्वयं क्रमबद्ध नहीं करेगा - यह एक नई सूची बनाएगा, और संदर्भ को list चर पर वापस असाइन करेगा। यदि आप जगह में सॉर्ट करना चाहते हैं, तो आपको List<T>.Sort विधि का उपयोग करना चाहिए।

+0

Is.ToList() यहां आवश्यक है? –

+0

@ कृष्णापीएस: हां, 'सूची' का संकलन-समय प्रकार मानना ​​'सूची 'है। अन्यथा आप एक 'IENumerable ' 'LIST ' चर को असाइन करने का प्रयास करेंगे। आपको इसकी आवश्यकता नहीं है अगर आपको केवल एक अनुक्रम की आवश्यकता है जिसे हर बार जब आप इसे फिर से शुरू करते हैं तो आलसी मूल्यांकन किया जाएगा। –

+0

। धन्यवाद! तो एक सूची लौटने का आदेश जो आलसी मूल्यांकन किया गया है? क्या मुझसे कोई चूक हो रही है? क्षमा करें कि मैं उलझन में हूँ? मुझे ऐसी स्थिति का सामना करना पड़ रहा है जहां मैंने सूची का आदेश दिया है और इसे उपरोक्त के रूप में आईनेमरेबल के रूप में वापस कर दिया है, हालांकि जब मैं मूल्य बदलने के लिए उस लौटाई गई सूची में प्रत्येक के लिए एक करता हूं, तो मुझे लगता है कि ऑर्डर बाधित है .. –

16

इस तरह?

LINQ में:

var sortedList = originalList.OrderBy(foo => !foo.AVC) 
          .ToList(); 

या-जगह में:

originalList.Sort((foo1, foo2) => foo2.AVC.CompareTo(foo1.AVC)); 

जॉन स्कीट कहते हैं, चाल यहाँ जानना है कि falsetrue.

से 'छोटे' माना जाता है

यदि आपको लगता है कि आप अपने कोड में कई अलग-अलग स्थानों में इन ऑर्डरिंग ऑपरेशन कर रहे हैं, तो आप अपने टाइप Foo को आईपी में प्राप्त करना चाहेंगे IComparable<Foo> और IComparable इंटरफेस को लीमेंट करें।

9

मुझे लगता है कि आप उन्हें किसी अन्य चीज द्वारा क्रमबद्ध करना चाहते हैं, जहां सभी वस्तुओं के बीच एक सतत क्रम प्राप्त करने के लिए जहां एवीसी समान है। उदाहरण के लिए नाम:

var sortedList = list.OrderBy(x => c.AVC).ThenBy(x => x.Name).ToList(); 
संबंधित मुद्दे