2016-04-01 24 views
1

Dizelerim Listesi {"X", "W", "C", "A", "D", "B"} ve başka bir listeye sahibim dizeleri İlk listenin nasıl sıralanması gerektiğini söyleyen {"A", "B", "C", "D"}. Ama ikinci listede sadece dört öğe var. İlk listenin şu şekilde sıralanmasını istiyorum: A, B, C, D, X, W Aslında son iki harf X ve W, nasıl sipariş verildiği önemli değil, ama sonunda liste.Linq: Listeyi başka bir listeye göre sıralama

ama bu bana sadece dört öğe verir:

Bu çalıştı.

+0

Bu durum olmamalıdır. Size 6 ürün vermeli. Bununla birlikte, başlangıçta "X" ve "W" yi koyarlardı, çünkü list2'de -1 (0'dan küçük olan) bir indeksi vardır. –

cevap

2

Geçerli kod size 6 ürün verecektir. onlar listede -1 bir dizin var çünkü Ancak, burada 2.

düzeltmek nasıl başlangıçta X ve W koyacağız: diğerleriyle birlikte

var list1 = new List<string> {"X", "W", "C", "A", "D", "B"}; 
var list2 = new List<string> {"A", "B", "C", "D"}; 

var newList = list1.OrderBy(x => 
{ 
    var index = list2.IndexOf(x); 

    if (index == -1) 
     index = Int32.MaxValue; 

    return index; 
}) 
.ToList(); 
1

Bu çalışması gerekir: (LINQPad dan)

var newList = list1.OrderBy(i => { 
     var x = list2.IndexOf(i); 
     if(x == -1) 
     return int.MaxValue; 
     return x; }); 

Sonucu:

linqpad result

2

Bir daha yolu.

List<string> list1 = new List<string>() {"X", "W", "C", "A", "D", "B" } ; 
List<string> list2 = new List<string>() { "A", "B", "C", "D" } ; 

var newList = list2.Intersect(list1) 
        .Union(list1.Except(list2)); 

Kontrol Demo

İlgili konular