"路模型"
Public Class Road
Public Property Id As Integer
Public Property Name As String
Public Property RoadType As RoadType
End Class
高速公路模型
Public Class Highway
Public Property Id As Integer
Public Property Name As String
End Class
'道路类型枚举
Public Enum RoadType
Residential
Highway
OffRoad
End Enum
高速公路比较器(用于distinct子句)
Public Class HigwayNameComparer
Implements IEqualityComparer(Of Highway)
Public Function Equals(ByVal x As Highway, ByVal y As Highway) As Boolean Implements IEqualityComparer(Of Highway).Equals
Return x.Name = y.Name
End Function
Public Function GetHashCode(ByVal obj As Highway) As Integer Implements IEqualityComparer(Of Highway).GetHashCode
Return obj.Name.GetHashCode()
End Function
End Class
控制台应用程序
Sub Main()
Dim roads As New List(Of Road)
roads.Add(New Road() With {.Id = 1, .Name = "Barclays Road", .RoadType = RoadType.Residential})
roads.Add(New Road() With {.Id = 2, .Name = "Effie Road", .RoadType = RoadType.Residential})
roads.Add(New Road() With {.Id = 3, .Name = "Out Road", .RoadType = RoadType.OffRoad})
roads.Add(New Road() With {.Id = 4, .Name = "M4", .RoadType = RoadType.Highway})
roads.Add(New Road() With {.Id = 5, .Name = "M4", .RoadType = RoadType.Highway})
Dim results = (From road In roads Where road.RoadType = RoadType.Highway
Select New Highway With {.Id = road.Id, .Name = road.Name}).Distinct(New HigwayNameComparer())
For Each highway As Highway In results
Console.WriteLine("{0}", highway.Name)
Next
Console.ReadLine()
End Sub
--- 输出:M4
OfType<Highway>
比road.RoadType = RoadType.Highway
的性能要差。 - serhio