How to sort Object collection with more than one Property

How to sort Object collection with more than one Property

currently I am able to sort by one property thats is shelflocation but how can I implement sorting like for Shelflocation, OrderID
Means first sort by Shelflocation then OrderID

I really appreciate any code examples

Thanks
'MY CLASS WHICH IS HANDLING SORTING
    Public Class PickListLineCollection
        Inherits CollectionBase
 
        Public Function Add(ByVal NewPickListLine As PickListLine) As Integer
 
            ' If the customer doesn't already exist, add it.        
            Return InnerList.Add(NewPickListLine)
        End Function
 
#Region "Sorting the collection"
 
        Public Sub Sort(ByVal propertyName As String)
 
            If propertyName.ToUpper() = "SHELFLOCATION" Then
                ' Using Pick List Comparer to sort by Shelf Location 
                Dim Comparer As New PickListCompare
                InnerList.Sort(Comparer)
            End If
        End Sub
 
#End Region
 
    End Class
 
#Region "Code to Sort the collection"
    ' This class provides mechanism for comparing SiteRating property
    Public Class PickListCompare
        Implements IComparer
 
        Function Compare(ByVal x As Object, ByVal y As Object) As Integer _
                            Implements IComparer.Compare
 
            Dim PickListLineY As PickListLine
            Dim PickListLineX As PickListLine
 
            ' Converting generic input objects to the objects of Product class
            PickListLineX = CType(x, PickListLine)
            PickListLineY = CType(y, PickListLine)
 
            ' Comparing SiteRating property and returing comparison result
            Return String.Compare(PickListLineX.ShelfLocation, PickListLineY.ShelfLocation)
 
        End Function
 
    End Class
 
 
 
 
'OBJECT WHICH NEED SORTING
Public Class PickListLine
 
        Private m_strShelfLocation As String
        Private m_lngOrderID As Long
        Private m_strCustomer As String
        Private m_strProductName As String
 
        Public Sub New(ByVal ShelfLocation As String, _
                       ByVal OrderID As Long, _
                       ByVal Customer As String, _
                       ByVal ProductName As String, _
                       )
 
            m_strShelfLocation = ShelfLocation
            m_lngOrderID = OrderID
            m_strCustomer = Customer
            m_strProductName = ProductName
 
        End Sub
 
        Public ReadOnly Property ShelfLocation() As String
            Get
                Return m_strShelfLocation
            End Get
        End Property
 
 
        Public ReadOnly Property OrderID() As Long
            Get
                Return m_lngOrderID
            End Get
        End Property
 
        Public ReadOnly Property CustomerName() As String
            Get
                Return m_strCustomer
            End Get
        End Property
 
 
        Public ReadOnly Property ProductName() As String
            Get
                Return m_strProductName
            End Get
        End Property
 
    End Class

Open in new window

LVL 1
shieldguyAsked:
Who is Participating?
 
Mike TomlinsonConnect With a Mentor Middle School Assistant TeacherCommented:
In your Compare() method, store the result of the first comparsion in a local variable.  If they are equal then do the second comparison and return that instead:

        Function Compare(ByVal x As Object, ByVal y As Object) As Integer _
                            Implements IComparer.Compare
 
            Dim PickListLineY As PickListLine
            Dim PickListLineX As PickListLine
 
            ' Converting generic input objects to the objects of Product class
            PickListLineX = CType(x, PickListLine)
            PickListLineY = CType(y, PickListLine)
 
            ' Comparing SiteRating property and returing comparison result
            Dim result As Integer = PickListLineX.ShelfLocation.CompareTo(PickListLineY.ShelfLocation)
            If result = 0 Then
                result = PickListLineX.OrderID.CompareTo(PickListLineY.OrderID)
            End If
            Return result
        End Function
0
 
JunkManCommented:
That was exactly one of the reasons i upgraded most of my projects to 3.5...

Linq is a beauty :)
0
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
@JunkMan,

Yeah, I'm sure Linq can handle it quite nicely in short code that is easy to read and understand.

I'd love to play with it...can you buy me a new laptop so I can get cracking?...  =)
0
 
JunkManCommented:
@Idle_Mind,

I'm sure a new laptop wouldn't be required just for an upgrade to vs08! In any case here you go, it looks pretty new to me!..
17laptop-l.jpg
0
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
Thanx!  Unfortunately my replicator is down...maybe I can whip one of those up tomorrow...  ;)
Replicator.jpg
0
All Courses

From novice to tech pro — start learning today.