Ich habe zwei Listen. BeamElevations<Elevation>
und FloorElevations<Elevation>
. Wie kann ich diese in Elevations<Elevation>
list zusammenführen und sie anhand ihrer Höhenlage mit Linq anordnen?
Verwenden Sie Concat
und OrderBy
var result = list1.Concat(list2).OrderBy(x => x.Elevation).ToList();
Wenn Sie Duplikate entfernen und einen eindeutigen Satz von Elementen erhalten möchten, können Sie auch die Union
-Methode verwenden:
var result = list1.Union(list2).OrderBy(x => x.Elevation).ToList();
Damit es ordnungsgemäß funktioniert, müssen Sie die Equals
- und GetHashCode
-Methoden in Ihrer Klasse überschreiben.
Anfangs mischen Sie sie wie folgt zusammen:
Elevations=BeamElevations.Union(FloorElevations)
.ToList();
Dann
Elevations=Elevations.OrderBy(x=>x.Elevation)
.ToList();
Oder in einem Schritt:
Elevations=BeamElevations.Union(FloorElevations)
.OrderBy(x=>x.Elevation)
.ToList();
Eine andere Möglichkeit, dies zu erreichen, wäre die Verwendung von Concat
.
Elevations=BeamElevations.Concat(FloorElevations)
.OrderBy(x=>x.Elevation)
.ToList();
List<Elevation> Elevations= FloorElevations.Concat(BeamElevations).ToList();
Verwenden Sie List.AddRange
list1.AddRange(list2);
list1.OrderBy(l => l.Elevation);
Wenn es Entwickler gibt, die in VB.NET nach einer Lösung suchen, gehen Sie hier:
Dim list1 As List(Of MyObject)
Dim list2 As List(Of MyObject)
Dim mergedAndSortedList As List(Of MyObject)
mergedAndSortedList = (From obj In list1.Union(list2)
Order By obj.MyPropertyToSortOn
Select obj).ToList()