I have to log FTP activity using VendorID. Some vendors have multiple FTP user names, but I only need to log one (the latest).
For example:
Pete
VendorID 4 (two user names)
So I created a class to store the FTP activity:
Public Class VendorClass
Public VendorID As Integer
Public FTPUserName As String
Public File As String
Public Date As DateTime
End Class
Question:
How query the list and group by UserID, and return the latest date and time.
Original List
VendorID FTP UserName File Date
1 Mike BalanceSheet.csv 6/17/2015 10:20
1 Pete BalanceSheet.csv 6/17/2015 10:40
2 Ron BalanceSheet.csv 6/17/2015 10:20
3 Julia BalanceSheet.csv 6/17/2015 14:20:02
4 Jack BalanceSheet.csv 6/17/2015 11:20
4 Luis BalanceSheet.csv 6/17/2015 09:20
Grouped result:
VendorID FTP UserName File Date
1 Pete BalanceSheet.csv 6/17/2015 10:40
2 Ron BalanceSheet.csv 6/17/2015 10:20
3 Julia BalanceSheet.csv 6/17/2015 14:20:02
4 Jack BalanceSheet.csv 6/17/2015 11:20
My function is only able to select 1 vendor at the time:
Private Function FlattenDuplicateEntries(ActivityList As List(Of VendorClass)) As List(Of VendorClass)
FlattenDuplicateEntries = New List(Of VendorClass)
For Each vendor In FTPUserNameList
Dim val As New VendorClass
val = ActivityList.Find(Function(value As VendorClass) value.VendorID = vendor.VendorID)
Next
End Function
Private Function FlattenDuplicateEntries(ActivityList As List(Of VendorClass)) As List(Of VendorClass)
Dim filtered As New Dictionary(Of Integer, VendorClass)()
For Each vendor In ActivityList
If Not filtered.ContainsKey(vendor.VendorID) Then
filtered.Add(vendor.VendorID, vendor)
Else If filtered(vendor.VendorID).Date < vendor.Date Then
filtered(vendor.VendorID) = vendor
End If
Next
Return filtered.Values.ToList()
End Function