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
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