'Дорожная модель
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
'RoadType Enum
Public Enum RoadType
Residential
Highway
OffRoad
End Enum
' шоссе Comparer (используемый в отдельной статье)
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
ок ... но я не закончил свой код, потому что мне нужно выбрать отличный (с различными .id) элементов – serhio
Область ползучести!:-) ОК, обновлено .. –
Я не уверен, могу ли я использовать MoreLINQ в коммерческом проприетарном проекте. – serhio