2016-05-16 3 views
-3

У меня есть List объект следующим образом:Список заказа объекта в том же порядке, что и другой список в C#

var list1 = new List<DummyObject> { 
     new DummyObject { ID="1", UniqueCode="ltrasd8ShFwNEyWrPTd9jIJJQ" }, 
     new DummyObject { ID="2", UniqueCode="GB456rpcpxRYEeOr32w5oRMwg" }, 
     new DummyObject { ID="3", UniqueCode="Y7twLumNJU6dQZLR0KxqA"  }, 
     new DummyObject { ID="4", UniqueCode="nG3vejzzxkiO21oDt58vkw" }, 
     new DummyObject { ID="5", UniqueCode="aPwwG1JMYUGTvOL2lG0YFg" },    
    } 

и другое определение List объекта с идентификаторами является:

List<int> list2 = new List<int>() { 2, 4, 5, 1, 3 }; 


Я хочу закажите list1 по номеру list2, и результат должен быть следующим:

var output= new List<DummyObject> { 
     new DummyObject { ID="2", UniqueCode="ltrasd8ShFwNEyWrPTd9jIJJQ" }, 
     new DummyObject { ID="4", UniqueCode="GB456rpcpxRYEeOr32w5oRMwg" }, 
     new DummyObject { ID="5", UniqueCode="Y7twLumNJU6dQZLR0KxqA"  }, 
     new DummyObject { ID="1", UniqueCode="nG3vejzzxkiO21oDt58vkw" }, 
     new DummyObject { ID="3", UniqueCode="aPwwG1JMYUGTvOL2lG0YFg" },    
    } 

Может ли кто-нибудь, пожалуйста, направить меня здесь, как добиться этого, используя LINQ?

ответ

3

Если списки мало, то вы можете сделать это следующим образом:

var result = list1.OrderBy(x => list2.IndexOf(Convert.ToInt32(x.ID))).ToList(); 

Если списки велики, то следующие решение будет работать лучше:

//Create a dictionary that maps the integer values of the IDs to the objects 
var dictionary = list1.ToDictionary(x => Convert.ToInt32(x.ID), x => x); 

var result = list2.Select(x => dictionary[x]).ToList(); 
0

Вы можете сделать это с помощью LINQ, как это:

var output = list1.OrderBy(dummyObject => list2.IndexOf(int.Parse(dummyObject.ID))).ToList(); 
0

Join сохраняет порядок элементов о е внешняя последовательность (list2), и для каждого из его элементов, порядок согласующих элементов внутренней последовательности (list1)

var output = list2.Join(list1, i => i.ToString(), o => o.ID, (i,o) => o) 
        .ToList(); 
0

попробовать это

var _orderedList = (from l2 in list2 join l1 in list1 on l2 equals int.Parse(l1.ID) select l1).ToList(); 
Смежные вопросы