Domanda

I want to sort all items in the list of the property reviews of the class CompanyTotalReview by the property reviewdatetime in descending order.

Here's what I have:

Dim allReviews As RestService.CompanyTotalReview = rst.getReviews(type, objectId, _lang)

Dim dc As New ReviewComparer
allReviews.reviews.Sort(dc)



Public Class CompanyTotalReview
    Public Property totalreviews() As Integer
        Get
            Return _totalreviews
        End Get
        Set(value As Integer)
            _totalreviews = value
        End Set
    End Property
    Private _totalreviews As Integer

    Public Property averagereview() As String
        Get
            Return _averagereview
        End Get
        Set(value As String)
            _averagereview = value
        End Set
    End Property
    Private _averagereview As String


    Public Property reviews() As List(Of Review)
        Get
            Return m_reviews
        End Get
        Set(value As List(Of Review))
            m_reviews = value
        End Set
    End Property
    Private m_reviews As List(Of Review)

End Class


Public Class Review
    Public Property overallscore() As Integer
        Get
            Return _overallscore
        End Get
        Set(value As Integer)
            _overallscore = value
        End Set
    End Property
    Private _overallscore As Integer

    Public Property reviewtext() As String
        Get
            Return _reviewtext
        End Get
        Set(value As String)
            _reviewtext = value
        End Set
    End Property
    Private _reviewtext As String

    Public Property reviewdatetime() As DateTime
        Get
            Return _reviewdatetime
        End Get
        Set(value As DateTime)
            _reviewdatetime = value
        End Set
    End Property
    Private _reviewdatetime As DateTime


End Class

updated class based on comments

Public Class ReviewComparer
    Implements IComparer(Of RestService.Review)

    Public Function Compare(xr As RestService.Review, yr As RestService.Review) As Integer Implements System.Collections.Generic.IComparer(Of RestService.Review).Compare

        Dim x As DateTime = xr.reviewdatetime
        Dim y As DateTime = yr.reviewdatetime

        If x = Nothing Then
            If y = Nothing Then
                Return 0
            Else
                Return -1
            End If
        Else
            If y = Nothing Then
                Return 1
            Else
                Dim retval As Integer = x.CompareTo(y)

                If retval <> 0 Then
                    Return retval
                Else
                    Return x.CompareTo(y)
                End If
            End If
        End If

    End Function
End Class
È stato utile?

Soluzione

You are sorting Review objects, not datetime objects. Use a review comparer like this.

Public Class ReviewComparer
    Implements IComparer(Of Review)

    Public Function Compare(xr As Review, yr As Review) As Integer Implements System.Collections.Generic.IComparer(Of Review).Compare

        Dim x As DateTime = xr.reviewdatetime
        Dim y As DateTime = yr.reviewdatetime

        If x = Nothing Then
            If y = Nothing Then
                Return 0
            Else
                Return -1
            End If
        Else
            If y = Nothing Then
                Return 1
            Else
                Dim retval As Integer = x.CompareTo(y)

                If retval <> 0 Then
                    Return retval
                Else
                    Return x.CompareTo(y)
                End If
            End If
        End If

    End Function
End Class
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top