2016-04-01 5 views
1

Ich habe eine Liste der Zeichenfolgen Liste {"X", "W", "C", "A", "D", "B"} und ich habe eine andere Liste von Strings Liste {"A", "B", "C", "D"}, die angibt, wie die erste Liste geordnet werden muss. Aber die zweite Liste enthält nur vier Elemente. Ich möchte, dass meine erste Liste so geordnet wird: A, B, C, D, X, W. Eigentlich sind die letzten beiden Buchstaben X und W egal, wie sie bestellt sind, aber sie sollten am Ende sein Die Liste.Linq: Sortierung der Liste auf Basis einer anderen Liste

Ich habe versucht, dieses:

aber das gibt mir nur vier Punkte.

+0

Dies sollte nicht der Fall sein. Es sollte dir 6 Gegenstände geben. Es würde jedoch "X" und "W" am Anfang setzen, weil sie in list2 einen Index von -1 (der kleiner als 0 ist) haben. –

Antwort

2

Ihre aktuellen Code erhalten Sie 6 Artikel geben. Allerdings wird es X und W am Anfang setzen, da sie einen Index von -1 in der Liste haben 2.

Hier ist, wie das beheben:

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

sollte diese Arbeit:

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

Ergebnis (von LinqPad):

linqpad result

2

Eine weitere Möglichkeit, zusammen mit anderen.

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

prüfen Demo