vb.net — linq — фильтрующий объект списка

#vb.net

#vb.net

Вопрос:

Я использую LINQ — VB.Net

Я хочу отфильтровать свой объект списка, передав объект String в where.

 Dim _permittedTransactionCodes As List(Of String) = Nothing   'String object
  

он заполнен данными.

 Dim tap100transCodeInfos As List(Of Tap100transCodeInfo) = _dal.GetActiveTap100transCodeByHdrScreenCde(UCase(screenId), "TRAN_CDE")
  

я пытаюсь что-то сделать ниже, но не получаю отфильтрованные результаты

 tap100transCodeInfos.Where(Function(x) _permittedTransactionCodes.Contains(x.TranCde))
  

есть идеи?

Спасибо

Ответ №1:

Убедитесь, что выходные данные Where функции присвоены переменной. Where не фильтрует существующий список, но возвращает новый отфильтрованный список.

 Dim result As IEnumerable(Of Tap100transCodeInfo) = _
    tap100transCodeInfos.Where(Function(x) _
        _permittedTransactionCodes.Contains(x.TranCde) _
    )
  

Тогда result должны быть отфильтрованные результаты.

Редактировать:

Where возвращает значение IEnumerable(Of T) поэтому, если вы присваиваете выходные данные той же переменной, вам нужно добавить .ToList() в конец инструкции (или определить, tap100transCodeInfos что это IEnumerable(Of Tap100transCodeInfo) будет с самого начала).

 tap100transCodeInfos = _
    tap100transCodeInfos.Where(Function(x) _
        _permittedTransactionCodes.Contains(x.TranCde) _
    ).ToList()
  

Комментарии:

1. «Не удалось привести объект типа ‘WhereListIterator 1[RTS.BusinessEntities.Tap100transCodeInfo]' to type 'System.Collections.Generic.IList 1[RTS.BusinessEntities. Коснитесь 100transcodeinfo]’.»

2. @user706311 добавил дополнение.