Общий список запросов

Я должен регистрировать активность FTP, используя VendorID. У некоторых поставщиков есть несколько имен пользователей FTP, но мне нужно зарегистрировать только одно (последнее).

Например:

  • VendorID 1 (два имени пользователя)
  • Майк
  • Пит

  • VendorID 4 (два имени пользователя)

  • Джек
  • Луис

Поэтому я создал класс для хранения активности FTP:

Public Class VendorClass
  Public VendorID   As Integer
  Public FTPUserName As String  
  Public File   As String
  Public Date As DateTime
End Class
  • Я загружаю файл в список VendorClass

Вопрос:

Как запросить список и группу по UserID и вернуть последнюю дату и время.

Исходный список

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

Сгруппированный результат:

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

Моя функция может выбрать только 1 поставщика за раз:

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

person Internet Engineer    schedule 06.08.2015    source источник
comment
Вы запрашиваете список по UserId, но в вашем типе нет UserId: вы имеете в виду VendorID?   -  person Richard    schedule 06.08.2015


Ответы (2)


(Поскольку это также помечено как C#, я не буду пытаться переводить на VB.)

Что-то типа:

var lastByVendor = from act in ActivityList
                   group by act.VendorID into grp
                   let last = grp.OrderByDescending(x => x.Date).First()
                   select new {
                     VendorId = grp.Key,
                     Date = last.Date,
                     File = last.File,
                     FTPUserName = last.FTPUserName
                   };

В этом я:

  • Сгруппируйте по VendorID и сделайте все остальное для каждого поставщика
  • Получить последнюю запись (в BCL нет оператора MaxBy, поэтому используется сортировка)
  • Key группы — это значение из группы по
person Richard    schedule 06.08.2015

person    schedule
comment
Эта строка ( filtered.Add (поставщик)) дает следующее исключение: Аргумент не указан для параметра «значение» «Общедоступного добавления добавления (ключ как TKey, значение как TValue)» - person Internet Engineer; 06.08.2015