2014-04-11 1 views
9

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

+0

Qual è il -1 per? :) – Vahid

+0

Non ha votato, ma l'id lo immagina a causa della mancanza di sforzi di ricerca – Sayse

+0

penso che sia perché le persone sono nobs –

risposta

17

Usa Concat e OrderBy

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.

+0

Posso usare 'Union'? – Vahid

+4

@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._ –

+0

Vedo. Continuerò con "Union" allora. – Vahid

3

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(); 
+0

Grazie per la risposta completa. – Vahid

+0

@Vai che benvenuto. – Christos

+0

questo non è completo, Union non rimuoverà nulla se non si sostituisce gli uguali e gethashcode. Funzionerà proprio come il Concat –

2
List<Elevation> Elevations= FloorElevations.Concat(BeamElevations).ToList(); 
1

Usa List.AddRange

list1.AddRange(list2); 
    list1.OrderBy(l => l.Elevation); 
0

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