Marcello
Marcello

Reputation: 448

extract list of string from list of custom class

i have a list(of custom class)

and i want to extract a list of all 'name' String, from it, through linq

I know how to do with a loop, but i need to get it with a linear, brief linq instruction.

i've checked this help C# Extract list of fields from list of class

but i have problem in linq correct syntax

in particular because i would like to extract a New List(Of String)

Class Student
    Sub New(ByVal NewName As String, ByVal NewAge As Integer)
        Name = NewName
        Age = NewAge
    End Sub

    Public Name As String
    Public Age As Integer
End Class

Public Sub Main
    Dim ClassRoom as New List(Of Student) From {New Student("Foo",33), New Student("Foo2",33), New Student("Foo3",22)}
    Dim OneStudent as Student = ClassRoom(0)
    Dim AllStudentsNames As New List(Of String) From {ClassRoom.Select(Function(x) x.Name <> OneStudent.Name).ToList}
End Sub

But something wrong...

Any help?

P.S. Since c# it's close to vb.Net, also c# helps are well welcome.

Upvotes: 0

Views: 701

Answers (1)

Steven Doggart
Steven Doggart

Reputation: 43743

First, you don't need to create a new list From the one returned by the LINQ method. It's already in a new list at that point, so you can just set AllStudentsNames equal directly to what the ToList method returns.

Second, you are not selecting the name. You are selecting the result of the equality test to see if the names are different. In other words, when you say Select(Function(x) x.Name <> OneStudent.Name), that returns a list of booleans, where they true if the names are different and false if the names are the same. That's not what you want. You want the list of names, so you need to select the name.

Third, if you need to filter the list so that it only returns ones where the name is different, then you need to add a call to the Where method.

Dim AllStudentsNames As List(Of String) = ClassRoom.
    Where(Function(x) x.Name <> OneStudent.Name).
    Select(Function(x) x.Name).
    ToList()

Upvotes: 1

Related Questions