从自定义类列表中提取字符串列表

时间:2019-02-08 13:02:13

标签: vb.net linq

我有一个列表(自定义类)

并且我想通过linq从中提取所有“名称”字符串的列表

我知道如何处理循环,但是我需要使用线性,简短的linq指令来获取它。

我已经检查了此帮助 C# Extract list of fields from list of class

但是我在linq正确的语法上有问题

特别是因为我想提取一个新列表(字符串)

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

但是出了点问题...

有帮助吗?

P.S。由于c#接近vb.Net,因此也欢迎使用c#帮助。

1 个答案:

答案 0 :(得分:1)

首先,您不需要创建新列表From,这是LINQ方法返回的列表。此时它已经在新列表中,因此您可以直接将AllStudentsNames设置为等于ToList方法返回的值。

第二,您没有选择名称。您正在选择相等性测试的结果以查看名称是否不同。换句话说,当您说Select(Function(x) x.Name <> OneStudent.Name)时,将返回一个布尔值列表,如果名称不同,则返回true;如果名称相同,则返回false。那不是你想要的。您需要名称列表,因此需要选择名称。

第三,如果需要过滤列表,使其仅返回名称不同的列表,则需要向Where方法添加调用。

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