Я пытаюсь сортировать список объектов по свойству date, но даты не упорядочены правильно. Я попытался передать их в массив и использовать Array.Sort
, и я также попытался передать их в список и используя List.OrderBy(Function(x) x.requestClose)
, где свойство requestClose
- это дата, но я получаю тот же результат.vb.net Сортировка дат
Например, у меня есть следующие даты:
11/9/2015,
11/20/2015,
11/10/2015
То, что я хочу, это список, чтобы быть организованы как:
11/9/2015,
11/10/2015,
11/20/2015
но то, что я получаю:
11/10/2015,
11/20/2015,
11/9/2015
Дата собственности объявлена как:
Public requestClose As Date
, а затем использовать с:
DateTime.TryParse(formAddEquip.dtpCxDate.Value, newEquip.requestClose)
Я был в состоянии заставить его работать, создавая отдельный вид, в частности, для случая, когда сортировка по дате. Проблема, о которой говорили люди, заключается в том, что keyArray()
присваивается строка, а не дата. Есть ли удобный способ объявить этот массив, чтобы он не вызывал то, что по сути является той же подпрозой, которая отличается только типом переменной массива?
Public Sub dateSort()
Dim thisEquipList As New classEquipCollection
thisEquipList.Clear()
Dim keyArray() As Date 'THIS IS WHERE IT WAS PREVIOUSLY DECLARED A STRING; string sorting is still needed for other sorting, such as by equip.name
'
ReDim keyArray(0 To project.equipList.Count - 1)
'create an array of the search terms
For i = 1 To project.equipList.Count
keyArray(i - 1) = project.equipList(i - 1).requestClose
Next
Array.Sort(keyArray)
'remove duplicats in the key array
Dim dupeFound As Boolean
Dim newKeyArray() As String
ReDim newKeyArray(0 To 0)
Dim noDupeIndex As Integer
'new key array holds only non-duplicates
For i = 0 To UBound(keyArray)
dupeFound = False
For j = (i + 1) To UBound(keyArray)
If keyArray(j) = keyArray(i) Then
dupeFound = True
End If
Next j
'if a unique key, add it to the non-duplicate array
If dupeFound = False Then
ReDim Preserve newKeyArray(0 To noDupeIndex)
newKeyArray(noDupeIndex) = keyArray(i)
noDupeIndex = noDupeIndex + 1
End If
Next i
'match the equipment item to the search term and
For i = 0 To UBound(newKeyArray)
For Each item In project.equipList
If newKeyArray(i) = item.requestClose Then
thisEquipList.Add(item)
End If
Next
Next
'now that the list is sorted, assign it to project equiplist
project.equipList.Clear()
For i = 0 To thisEquipList.Count - 1
project.equipList.Add(thisEquipList(i))
Next
End Sub
Каков тип данных 'dateProperty'? Это строка? Если да, сделайте вместо этого «дату». –
Вам нужно показать код - похоже, что они не являются фактическими типами даты, но строки («9» больше, чем «10»). [Изменить] ваше сообщение, не добавляйте код в комментарии. – Plutonix
Я считаю, что они корректно отображаются как типы даты. Я использовал DateTime.TryParse (formAddEquip.dtpCxDate.Value, newEquip.requestClose) – coolhand