web-dev-qa-db-fra.com

Fusionner deux listes <objet> en une liste dans Linq

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?

12
Vahid

Utilisez Concat et OrderBy

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.

27
Selman Genç

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();
4
Christos
 List<Elevation> Elevations= FloorElevations.Concat(BeamElevations).ToList();
2
Sajeetharan

Utilisez List.AddRange

   list1.AddRange(list2);
   list1.OrderBy(l => l.Elevation);
2
huMpty duMpty

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()
0
StackOverflowUser