我在一个集合中添加数据,我想根据日期排序。我想以这样的方式组织集合中的数据:所有过去的日期或当前日期应该在顶部,并且所有未来日期应该在过去的当前日期之后到达底部。
我正在做这样的事情,如下所述
objList.Name = ' Here I am getting the name
objList.CurDate = ' Here I am getting the current date
obJList.EventDate = ' Here I am getting the event date
然后我在一个集合中添加上述记录。
Dim colEvents As New Collection
colEvents.Add(objList)
在此之后,我想检查是否EventDate <= CurDate
,然后对集合中的数据进行排序,使得过去和当前日期排列在顶部,未来日期排在过去和当前日期之后。
注意:EventDate
可以过去,将来或当前日期。
有人可以帮助我了解我该如何实现这一目标?
答案 0 :(得分:0)
没有本地方式对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
输出:
收集:
姓名:姓名1,活动日期:12/20/2016 12:00:00 AM
姓名:姓名2,活动日期:12/5/2016 12:00:00 AM
姓名:姓名3,活动日期:12/10/2016 12:00:00 AM
列表:
姓名:姓名2,活动日期:12/5/2016 12:00:00 AM
姓名:姓名1,活动日期:12/10/2016 12:00:00 AM
姓名:姓名3,活动日期:12/20/2016 12:00:00 AM
我解释了你的陈述我想检查EventDate&lt; = CurDate,然后对集合中的数据进行排序,使得过去和当前日期排列在顶部,未来日期排在过去和当前日期之后< / em>,简单地表示您希望按升序排序,CurDate
不能用于任何目的。如果这是错误的,那么请澄清,我们可以在我的例子中修复OrderBy
lambda。
如果您真的遇到Collection
,请参阅与排序VBA集合相关的this similar question