2009-05-15 14 views
14

हमारे पास एक सामान्य सूची (उत्पाद का) है जिसे उत्पाद वर्ग के दो या दो से अधिक गुणों पर सॉर्ट किया जाना चाहिए।दो या दो से अधिक मानों पर जेनेरिक सूची क्रमबद्ध करें

उत्पाद श्रेणी में "लोकप्रिय" संख्यात्मक (आरोही), "क्लिक" संख्यात्मक (desc), "नाम" स्ट्रिंग (एसी) गुण हैं। गुणों का नामकरण करने के क्रम में हम सूची को क्रमबद्ध करना चाहते हैं।

यह लैम्बा कथन के साथ कैसे क्रमबद्ध किया जा सकता है? यदि एक संपत्ति के आधार पर सूची को सॉर्ट करना है।

उत्तर

3

मुझे खेद है, लेकिन क्या आप किसी भी सी # को जानते हैं?

products.OrderBy(p => p.Popular). 
    ThenByDescending(p => p.Clicked). 
    ThenBy(p => p.Name); 

क्या आप इससे प्राप्त कर सकते हैं?

+0

प्रतिभाशाली! मुझे "ThenBy" – BrokeMyLegBiking

30

संपादित करें बस एहसास हुआ कि यह एक वीबी प्रश्न था। यहां वीबी.Net समाधान

Dim list = GetSomeList() 
Dim sorted = list. _ 
    OrderBy(Function(x) x.Popular). _ 
    ThenBy(Function(x) x.Clicked). _ 
    ThenBy(Function(x) x.Name) 

सी # संस्करण है।

var list = GetSomeList(); 
var sorted = list.OrderBy(x => x.Popular).ThenBy(x => x.Clicked).ThenBy(x => x.Name); 
5

निम्नलिखित एक लैम्ब्डा अभिव्यक्ति के बारे में आपके प्रश्न का उत्तर करने के लिए, कि एक लैम्ब्डा अभिव्यक्ति में डालने के लिए, वीबी बहु लाइन लैम्ब्डा भाव का समर्थन नहीं करता के रूप में बहुत जटिल है की कोशिश करो।

एक गैर LINQ समाधान के लिए:

आप एक comparer के रूप में एक नामित विधि की जरूरत है:

Private Function Comparer(ByVal x As Product, ByVal y As Product) As Integer 
    Dim result As Integer = x.Popular.CompareTo(y.Popular) 
    If result = 0 Then 
     result = x.Clicked.CompareTo(y.Clicked) 
     If result = 0 Then 
      result = x.Name.CompareTo(y.Name) 
     End If 
    End If 
    Return result 
End Function 

उपयोग:

theList.Sort(AddressOf Comparer) 
+0

के बारे में पता नहीं था, जो मेरी समस्या थी। धन्यवाद! – John

+0

@ गुफा - वीबी मल्टीलाइन लैम्ब्डा अभिव्यक्तियों का समर्थन करता है। –

+0

@roryap: हाँ, यह अब करता है। जब जवाब लिखा गया था। – Guffa

2
List<Product> sortedProducts = null; 
sortedProducts = products.OrderBy(p => p.Popular) 
         .ThenByDescending(p => p.Clicked) 
         .ThenBy(p => p.Name) 
         .ToList(); 
संबंधित मुद्दे