2014-04-11 27 views
9

İki listeye sahibim. BeamElevations<Elevation> ve FloorElevations<Elevation>. Bunları Elevations<Elevation> listesine nasıl ayırabilirim ve bunları Linq kullanarak Yüksekliklerine göre nasıl sipariş edebilirim? Sonraİki Listeyi <object> bir kerede bir araya getirin

Elevations=BeamElevations.Union(FloorElevations) 
         .ToList(); 

Elevations=Elevations.OrderBy(x=>x.Elevation) 
        .ToList(); 

Ya tek adımda:

+0

için -1 nedir? :) – Vahid

+0

Oy vermedi ama id araştırmalarının yetersizliği yüzünden id iddiasının neden olduğu – Sayse

+0

sanırım insanlar çünkü onlar –

cevap

17

Kullanım Concat ve OrderBy

var result = list1.Concat(list2).OrderBy(x => x.Elevation).ToList(); 

ayrıca Union yöntemi kullanabilirsiniz:

bunu yapabilmek için
var result = list1.Union(list2).OrderBy(x => x.Elevation).ToList(); 

düzgün çalışıyorsanız, sınıfınızda Equals ve GetHashCode yöntemlerini overide etmeniz gerekir.

+0

'Union' kullanabilir miyim? – Vahid

+4

@Vahid evet, ancak sınıfınız için eşittir ve gethascode geçersiz kılarsanız yinelemeleri kaldıracaktır. Concat'tan farklıdır [belgeler] 'e bakın (http://msdn.microsoft.com/en-us/library/bb341731 (v = vs.110) .aspx): _Bu yöntem, return set_ –

+0

'daki duplicates'i hariç tutmaktadır. O zaman ben de "Union" ile konuşacağım. – Vahid

3

Başlangıçta aşağıdaki gibi bunları birleştirmek

Elevations=BeamElevations.Union(FloorElevations) 
         .OrderBy(x=>x.Elevation) 
         .ToList(); 

ulaşmak için başka bir yol bu kullanmak olacaktır Concat

Eğer unsurların bir dizi benzersiz çiftleri elemek ve almak istiyorsanız
+0

Tam cevap için teşekkürler. – Vahid

+0

@Vahid'e hoş geldiniz. – Christos

+0

bu tamamlanmadı, Birlik eşittir ve gethashcode geçersiz kılmaz eğer bir şey kaldırmaz.Onlar gibi sadece bilmiyordum Concat –

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

Kullanım List.AddRange

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

orada VB.NET sorununa çözüm arıyor olabilir orada herhangi Devs burada, sen gidersen:

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() 
İlgili konular