Существует нет родного способа сортировки Microsoft.VisualBasic.Collection. Я предлагаю преобразование в более новый тип, такой как List(Of T)
.
Во всяком случае, вот пример преобразования Collection
к List(Of T)
Определите класс, который держит свои события. Вы не предоставили его. Я думаю,
Class myEvent
Public Property Name As String
Public Property CurDate As DateTime
Public Property EventDate As DateTime
End Class
Теперь сделайте несколько событий и добавьте их в коллекцию. Я добавляю их из строя
Dim colEvents As New Collection()
Dim objList1 As New myEvent()
objList1.Name = "Name1"
objList1.EventDate = New DateTime(2016, 12, 20)
objList1.CurDate = DateTime.Now
colEvents.Add(objList1)
Dim objList2 As New myEvent()
objList2.Name = "Name2"
objList2.EventDate = New DateTime(2016, 12, 5)
objList2.CurDate = DateTime.Now
colEvents.Add(objList2)
Dim objList3 As New myEvent()
objList3.Name = "Name3"
objList3.EventDate = New DateTime(2016, 12, 10)
objList3.CurDate = DateTime.Now
colEvents.Add(objList3)
Вот где он может быть преобразован в List(Of myEvent)
и сортируются в то же время. О, поскольку это не примитивный тип, вы должны предоставить функцию OrderBy
, чтобы он знал, как сортировать.Эта функция просто возвращает EventDate
Dim eventsList As New List(Of myEvent)(
colEvents.
OfType(Of myEvent).
OrderBy(Function(l As myEvent) l.EventDate))
Просто, чтобы подтвердить заказ, распечатать содержимое обоих объектов
Console.WriteLine("Collection:")
For Each c As myEvent In colEvents
Console.WriteLine(
String.Format("Name: {0}, Event date: {1}",
c.Name, c.EventDate))
Next
Console.WriteLine("List:")
For Each l In eventsList
Console.WriteLine(
String.Format("Name: {0}, Event date: {1}",
l.Name, l.EventDate))
Next
Выход:
Коллекция:
Имя: Name1, дата события : 12/20/2016 12:00:00 AM
Имя: Name2, Дата события: 05/12/2016 12:00:00 AM
Имя: name3 Дата события: 12/10/2016 12:00:00 AM
Список:
Имя: Name2 Дата события: 12/5/2016 12:00:00 AM
Имя: Name1, дата события: 12/10/2016 12:00:00 AM
Имя: name3 дата события: 12/20/2016 12:00:00 AM
Я интерпретировал ваше заявление Я хочу, чтобы проверить, EventDate < = CurDate, затем сортируйте данные в коллекции так, чтобы прошлые и текущие даты были расположены вверху, а будущие даты начинаются после прошлых и текущих дат, чтобы просто означать, что вы хотите сортировать по возрастанию и что CurDate
не служит никакой цели. Если это неверно, пожалуйста, уточните, и мы можем исправить в моем примере лямбда OrderBy
.
И если вы действительно застряли Collection
см this similar question, связанные с сортировкой коллекции VBA
Почему вы должны CurDate в каждом объекте? Разве это не одно и то же для каждого (сегодня)? – djv
И вы застряли в 'Collection'? Есть гораздо лучшие способы хранения данных с помощью .NET. – djv
И какова точка проверки того, была ли дата события в прошлом перед сортировкой, т. Е. * Check-if EventDate <= CurDate, а затем сортировать *? – djv