Проблема в том, что Где не меняет коллекцию. Возвращает вновь отфильтрованную коллекцию.
Попробуйте это:
Dim filteredPerson = people.Where(Function(fp) fp.Fname = "Bob")
(Кстати, я не вижу здесь ничего динамического ... где вы используете динамический LINQ?)
Чтобы добавить несколько предложений Where
, вам нужно что-то вроде этого:
Dim searchList As New List(Of String)
searchList.Add("Bob")
searchList.Add("Dave")
Dim filteredPerson As IEnumerable(Of String) = people
For Each s In searchList
Dim innerName As String = s
filteredPerson = filteredPerson.Where(Function(fp) fp.Fname = innerName)
Next
Dim finalList = filteredPerson.ToList
For Each p In finalList
Debug.Print("FNAME: " + p.Fname)
Next
Однако я не верю, что это на самом деле , что вы хотите сделать. Каждое предложение Where
будет настаивать на том, что Fname
является указанным именем - и это не будет Боб и Дейв! Я думаю, что вы действительно хотите что-то, что может быть выражено гораздо проще:
Dim searchList As New List(Of String)
searchList.Add("Bob")
searchList.Add("Dave")
Dim filteredPerson = people.Where(Function(fp) searchList.Contains(fp.Fname))
Dim finalList = filteredPerson.ToList
For Each p In finalList
Debug.Print("FNAME: " + p.Fname)
Next
Все, что мы хотим знать, это то, находится ли Fname
в searchList
, что и делает Contains
.