J'ai deux listes. BeamElevations<Elevation>
et FloorElevations<Elevation>
. Comment puis-je les fusionner dans la liste Elevations<Elevation>
et les commander en fonction de leur altitude avec Linq?
var result = list1.Concat(list2).OrderBy(x => x.Elevation).ToList();
Si vous souhaitez supprimer les doublons et obtenir un ensemble unique d’éléments, vous pouvez également utiliser Union
method:
var result = list1.Union(list2).OrderBy(x => x.Elevation).ToList();
Pour que cela fonctionne correctement, vous devez remplacer les méthodes Equals
et GetHashCode
dans votre classe.
Au départ, vous les fusionnez comme ci-dessous:
Elevations=BeamElevations.Union(FloorElevations)
.ToList();
Ensuite
Elevations=Elevations.OrderBy(x=>x.Elevation)
.ToList();
Ou en une étape:
Elevations=BeamElevations.Union(FloorElevations)
.OrderBy(x=>x.Elevation)
.ToList();
Une autre façon d’y parvenir serait d’utiliser Concat
Elevations=BeamElevations.Concat(FloorElevations)
.OrderBy(x=>x.Elevation)
.ToList();
List<Elevation> Elevations= FloorElevations.Concat(BeamElevations).ToList();
Utilisez List.AddRange
list1.AddRange(list2);
list1.OrderBy(l => l.Elevation);
S'il existe des développeurs susceptibles de rechercher une solution dans VB.NET, procédez comme suit:
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()