Ho due elenchi. BeamElevations<Elevation>
e FloorElevations<Elevation>
. Come posso unirli nella lista Elevations<Elevation>
e ordinarli in base al loro Elevation usando Linq?Unisci due liste <object> in un elenco in Linq
risposta
var result = list1.Concat(list2).OrderBy(x => x.Elevation).ToList();
Se si desidera rimuovere i duplicati e ottenere un unico insieme di elementi è anche possibile utilizzare Union
metodo:
var result = list1.Union(list2).OrderBy(x => x.Elevation).ToList();
Al fine di rendere più funziona correttamente devi sostituire i metodi Equals
e GetHashCode
nella tua classe.
Posso usare 'Union'? – Vahid
@Vahid Sì, ma è possibile rimuovere i duplicati se si esegue l'override di equals e gethascode per la classe. È diverso da Concat vedere la [documentazione] (http://msdn.microsoft.com/en-us/library/bb341731 (v = vs.110) .aspx): _Questo metodo esclude i duplicati dal set di reso._ –
Vedo. Continuerò con "Union" allora. – Vahid
Inizialmente li uniscono come di seguito:
Elevations=BeamElevations.Union(FloorElevations)
.ToList();
Poi
Elevations=Elevations.OrderBy(x=>x.Elevation)
.ToList();
O in un solo passo:
Elevations=BeamElevations.Union(FloorElevations)
.OrderBy(x=>x.Elevation)
.ToList();
Un altro modo per raggiungere questo obiettivo sarebbe quello di utilizzare Concat
Elevations=BeamElevations.Concat(FloorElevations)
.OrderBy(x=>x.Elevation)
.ToList();
List<Elevation> Elevations= FloorElevations.Concat(BeamElevations).ToList();
Usa List.AddRange
list1.AddRange(list2);
list1.OrderBy(l => l.Elevation);
Se ci sono sviluppatori là fuori che potrebbero essere alla ricerca di una soluzione in VB.NET, qui si va:
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()
Qual è il -1 per? :) – Vahid
Non ha votato, ma l'id lo immagina a causa della mancanza di sforzi di ricerca – Sayse
penso che sia perché le persone sono nobs –