我有一个列表(自定义类)
并且我想通过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#帮助。
答案 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()